-
-
bailaohe
@刘看山 哦,这样啊,所以是这种模型的generalization就只能达到这个程度吗?
我现在是希望研究一下手写汉字的书法评估,作为前提是先要识别出手写的是哪个汉字;再针对对应的字帖,提取特征进行评估。
所以常用的手写汉字(3000+)希望能够较为准确识别出来。
请教一下,
我们训练模型,分离处理的验证集合,是应该像该课题那样提前分开吗?
最佳实践是不是应该,循环使用validate_spit参数进行数据集分割?另外,training的准确度达到0.9999是不是也太高了?我总觉的自己踩了什么坑。
求解惑
-
bailaohe
项目地址 http://manaai.cn/aicodes_detail3.html?id=35
请教一下各位大佬,我尝试重现这个项目(单个手写汉字的识别),
使用的就是文中的简单模型,如下:model = tf.keras.Sequential([ layers.Conv2D(input_shape=input_shape, filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2, 2), padding='same'), layers.Conv2D(filters=64, kernel_size=(3, 3), padding='same'), layers.MaxPool2D(pool_size=(2, 2), padding='same'), layers.Flatten(), # layers.Dense(1024, activation='relu'), layers.Dense(n_classes, activation='softmax') ]) return model
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 64, 64, 32) 320 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 32, 32, 32) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 32, 32, 64) 18496 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 16, 16, 64) 0 _________________________________________________________________ flatten (Flatten) (None, 16384) 0 _________________________________________________________________ dense (Dense) (None, 3755) 61525675 ================================================================= Total params: 61,544,491 Trainable params: 61,544,491 Non-trainable params: 0 _________________________________________________________________
我用一个带GPU的比较弱的云主机,跑了15000个epoch,用了2天多。training准确滴差不多达到0.9999,可是validate准确率,还是停留在0.61附近。
这是继续训练模型时,拿到的log,validate准确度不会再变化了。
WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen. Epoch 1/10 1024/1024 [==============================] - 21s 20ms/step - loss: 0.0087 - accuracy: 0.9999 - val_loss: 544.5386 - val_accuracy: 0.6219 Epoch 2/10 1024/1024 [==============================] - 20s 19ms/step - loss: 0.0027 - accuracy: 1.0000 - val_loss: 541.1600 - val_accuracy: 0.6267 Epoch 3/10 1024/1024 [==============================] - 19s 18ms/step - loss: 6.6371e-04 - accuracy: 0.9999 - val_loss: 537.3775 - val_accuracy: 0.6217 Epoch 4/10 1024/1024 [==============================] - 18s 18ms/step - loss: 0.0304 - accuracy: 0.9998 - val_loss: 538.4648 - val_accuracy: 0.6226 Epoch 5/10 1024/1024 [==============================] - 20s 19ms/step - loss: 0.0067 - accuracy: 0.9999 - val_loss: 539.5592 - val_accuracy: 0.6237
这么简单的网络也会overfit吗?请教各位大佬提点一下下一步的优化方向