之前的训练精度
Epoch 20
-------------------------------
loss: 0.198042 [ 0/ 2368]
train Error:
train_Accuracy: 99.2%, Avg loss: 0.000984
Test Error:
Accuracy: 91.8%, Avg loss: 0.011144
cnn结构:
self.conv1 = nn.Conv2d(3, 16, 3)
self.conv2 = nn.Conv2d(16, 32, 3)
self.fc1 = nn.Linear(256, 128)
self.fc2 = nn.Linear(128, 96)
self.fc3 = nn.Linear(96, 36)
Epoch 20
-------------------------------
loss: 0.222930 [ 0/ 2368]
train Error:
train_Accuracy: 93.1%, Avg loss: 0.006265
Test Error:
Accuracy: 92.8%, Avg loss: 0.010486
cnn结构
self.conv1 = nn.Conv2d(3, 20, 3)
self.conv2 = nn.Conv2d(20, 32, 3)
self.fc1 = nn.Linear(256, 128)
self.fc2 = nn.Linear(128, 96)
self.fc3 = nn.Linear(96, 36)
learn_rate = 1e-3
减小学习率
learn_rate = 1e-4
Epoch 10
-------------------------------
loss: 0.096761 [ 0/ 2368]
train Error:
train_Accuracy: 97.9%, Avg loss: 0.002522
Test Error:
Accuracy: 94.4%, Avg loss: 0.007497
再次减小学习率,可以看到还在下降,继续迭代
learn_rate = 1e-5
Epoch 19
-------------------------------
loss: 0.152122 [ 0/ 2368]
train Error:
train_Accuracy: 98.4%, Avg loss: 0.002046
Test Error:
Accuracy: 94.4%, Avg loss: 0.008273
Epoch 20
-------------------------------
loss: 0.256407 [ 0/ 2368]
train Error:
train_Accuracy: 98.4%, Avg loss: 0.002045
Test Error:
Accuracy: 94.4%, Avg loss: 0.008070
这是迭代的时候loss值
Epoch 18
-------------------------------
loss: 0.166049 [ 0/ 2368]
train Error:
train_Accuracy: 98.6%, Avg loss: 0.001326
Test Error:
Accuracy: 93.8%, Avg loss: 0.009200
Epoch 19
-------------------------------
loss: 0.062747 [ 0/ 2368]
train Error:
train_Accuracy: 98.6%, Avg loss: 0.001326
Test Error:
Accuracy: 93.4%, Avg loss: 0.009085
Epoch 20
-------------------------------
loss: 0.044388 [ 0/ 2368]
train Error:
train_Accuracy: 98.6%, Avg loss: 0.001326
Test Error:
Accuracy: 93.1%, Avg loss: 0.009388
现在loss值确实在下降,训练集精度在缓慢上升(98.4——98.6),测试及精度却很久没有变化,这时还训练吗,我感觉可能到极限了,先训练到这里,测试一下。
单字母训练集成果
正确数2350, 错误数18
{'0': 3, 'S': 1, 'O': 13, 'I': 1}
验证集
正确数188, 错误数0
4字母验证码:
训练前
训练集测试结果: 正确数627, 错误数72
测试集正确数55, 错误数21
验证集正确数47, 错误数1
训练集{'0': 6, '8': 1, 'B': 2, 'Q': 3, 'V': 2, '1': 3, 'M': 2, 'S': 4, 'O': 29, '7': 5, 'W': 2, 'J': 3, 'D': 2, 'Z': 1, 'L': 1, 'Y': 3, 'T': 2, 'C': 3, 'A': 1, 'P': 1, 'N': 1, 'H': 2, 'I': 2, '3': 1, 'R': 3, 'U': 2}
训练后
测试集正确数583, 错误数116
测试集正确数56, 错误数20
验证集正确数43, 错误数4
训练集{'0': 11, '1': 7, '8': 3, 'B': 1, 'P': 4, 'C': 3, 'Q': 8, 'Z': 5, 'M': 2, 'Y': 6, '6': 1, 'I': 3, 'T': 3, 'D': 6, 'G': 1, 'O': 38, 'S': 4, '7': 6, 'A': 3, 'V': 4, 'J': 2, '9': 1, 'L': 3, 'E': 1, 'U': 1, 'R': 1, '4': 1, 'X': 1}
我是不是把训练集写反了?
为什么错的更多了,过拟合了吗???
可以看训练集错的具体的数量,可以看到数字0和字母O错的变多了,看来是过拟合了。
之后重新训练试一下,还好保留了之前的模型参数
试了一下迭代次数较少的版本
正确数520, 错误数179
看来是这个结构不行,下次换一个结构
又训练了一个模型,比之前的稍好,但是还是不如第一个,为啥呢,玄学吗?
正确数555, 错误数144
{'0': 5, '1': 6, '8': 1, '9': 2, 'B': 11, 'V': 2, 'I': 5, 'H': 1, 'S': 14, 'M': 2, 'Y': 6, 'C': 7, 'R': 3, '6': 2, 'Q': 7, 'X': 1, '4': 3, 'D': 7, 'G': 4, 'O': 50, '7': 7, 'J': 2, 'W': 1, 'Z': 3, 'L': 2, 'A': 1, 'F': 1, '3': 1, 'N': 1, 'T': 2}
又训练了一次
self.conv1 = nn.Conv2d(3, 16, 3)
self.conv2 = nn.Conv2d(16, 24, 3)
self.fc1 = nn.Linear(192, 128)
self.fc2 = nn.Linear(128, 96)
self.fc3 = nn.Linear(96, 36)
最终精度
训练集稍好于第一版
单字母训练集
{'O': 9}
但最终结果只是接近
四字母
Epoch 20
-------------------------------
loss: 0.115035 [ 0/ 2368]
train Error:
train_Accuracy: 99.7%, Avg loss: 0.000314
Test Error:
Accuracy: 91.8%, Avg loss: 0.014190
正确数624, 错误数75
{'0': 8, '8': 3, 'A': 3, 'Q': 6, 'M': 4, 'S': 3, 'H': 1, 'P': 2, 'O': 30, '1': 1, '7': 5, 'J': 4, 'V': 2, 'C': 2, 'D': 1, 'Z': 2, 'L': 3, 'Y': 2, 'E': 1, 'G': 2, 'I': 1, '3': 1, 'R': 2, 'B': 1, 'T': 1, 'U': 1}