昨天介绍完CNN卷积神经网路反向传播程序,今天要来研究CNN卷积神经网路实际运作程序:
首先是全部正向传播:
def forward_all(image, label):
#把图片像素0~255转乘-0.5~0.5
#另外把资料依序带入卷积层,池化层,和全连阶层
out = conv.forward((image / 255) - 0.5)
out = pool.forward(out)
out = softmax.forward(out)
#把机率值取log
loss = -np.log(out[label])
#机率最大值如果和实际label一样ACC取1
acc = 1 if np.argmax(out) == label else 0
#返回输出结果,loss,和acc
return out, loss, acc
接下来是训练过程(正向+反向传播)并修改权重:(程序如下)
#实际训练
def train_all(im, label, lr=.005):
#正向传播
out, loss, acc = forward_all(im, label)
#取出权重
gradient = np.zeros(10)
gradient[label] = -1 / out[label]
#反向传播(学习率0.005)
gradient = softmax.backprop(gradient, lr)
gradient = pool.backprop(gradient)
gradient = conv.backprop(gradient, lr)
#返回 loss和acc
return loss, acc
实际带入资料:
#做3次CNN训练
for epoch in range(3):
print('--- 第 %d 次训练---' % (epoch + 1))
#从0~len(train_images)序列将其打乱
permutation = np.random.permutation(len(train_images))
#把资料洗牌
train_images = train_images[permutation]
train_labels = train_labels[permutation]
# Train
#起始loss
loss = 0
#起始正确数
num_correct = 0
for i, (im, label) in enumerate(zip(train_images, train_labels)):
#每100次回报状况
if i > 0 and i % 100 == 99:
print(
'[Step %d] Past 100 steps: Average Loss %.3f | Accuracy: %d%%' %
(i + 1, loss / 100, num_correct)
)
loss = 0
num_correct = 0
#
l, acc = train_all(im, label)
#loss加总
loss += l
#正确数几总
num_correct += acc
训练过程结果如下:
--- 第 1 次训练---
[Step 100] Past 100 steps: Average Loss 2.235 | Accuracy: 18%
[Step 200] Past 100 steps: Average Loss 2.107 | Accuracy: 31%
[Step 300] Past 100 steps: Average Loss 1.982 | Accuracy: 45%
[Step 400] Past 100 steps: Average Loss 1.690 | Accuracy: 55%
[Step 500] Past 100 steps: Average Loss 1.403 | Accuracy: 62%
[Step 600] Past 100 steps: Average Loss 1.217 | Accuracy: 71%
[Step 700] Past 100 steps: Average Loss 1.064 | Accuracy: 69%
[Step 800] Past 100 steps: Average Loss 0.852 | Accuracy: 75%
[Step 900] Past 100 steps: Average Loss 0.738 | Accuracy: 81%
[Step 1000] Past 100 steps: Average Loss 0.771 | Accuracy: 73%
--- 第 2 次训练---
[Step 100] Past 100 steps: Average Loss 0.770 | Accuracy: 81%
[Step 200] Past 100 steps: Average Loss 0.659 | Accuracy: 80%
[Step 300] Past 100 steps: Average Loss 0.511 | Accuracy: 86%
[Step 400] Past 100 steps: Average Loss 0.542 | Accuracy: 84%
[Step 500] Past 100 steps: Average Loss 0.525 | Accuracy: 84%
[Step 600] Past 100 steps: Average Loss 0.585 | Accuracy: 83%
[Step 700] Past 100 steps: Average Loss 0.644 | Accuracy: 79%
[Step 800] Past 100 steps: Average Loss 0.570 | Accuracy: 79%
[Step 900] Past 100 steps: Average Loss 0.524 | Accuracy: 84%
[Step 1000] Past 100 steps: Average Loss 0.523 | Accuracy: 84%
--- 第 3 次训练---
[Step 100] Past 100 steps: Average Loss 0.451 | Accuracy: 86%
[Step 200] Past 100 steps: Average Loss 0.423 | Accuracy: 85%
[Step 300] Past 100 steps: Average Loss 0.437 | Accuracy: 91%
[Step 400] Past 100 steps: Average Loss 0.630 | Accuracy: 77%
[Step 500] Past 100 steps: Average Loss 0.355 | Accuracy: 91%
[Step 600] Past 100 steps: Average Loss 0.474 | Accuracy: 86%
[Step 700] Past 100 steps: Average Loss 0.453 | Accuracy: 88%
[Step 800] Past 100 steps: Average Loss 0.455 | Accuracy: 87%
[Step 900] Past 100 steps: Average Loss 0.335 | Accuracy: 92%
[Step 1000] Past 100 steps: Average Loss 0.449 | Accuracy: 89%
好,现在带入test程序如下:
#起始loss
loss = 0
#起始正确数
num_correct = 0
for im, label in zip(test_images, test_labels):
#正向传播
out, l, acc = forward_all(im, label)
#看loss
loss += l
#看正确数
num_correct += acc
#test总长
num_tests = len(test_images)
#算比例
print('Test Loss:', loss / num_tests)
print('Test Accuracy:', num_correct / num_tests)
结果如下:
Test Loss: 0.6609244800993207
Test Accuracy: 0.781
(资料来源:https://zhuanlan.zhihu.com/p/102119808并加上注解程序)
好,今天CNN程序算是研究完,机器学习算是告一段落
男孩看着狐狸,狐狸看着男孩,他们相交於森林入口,男孩全身被一团橘色气包围着,而望着没有嘴巴狐狸,男孩只是讶异地看着牠,狐狸举起牠红色爪子,瞬间在周围出现火焰包围着了两人,狐狸朝着男孩走去,男孩感觉到一阵恐惧,想要逃跑,但周围都是火,男孩只能退到火焰周围,狐狸慢慢地走到男孩面前,男孩闭上了眼睛,想像自己被爪子贯穿画面,只是过了许久,都没有感觉到痛觉,男孩好奇的张开眼睛,发现狐狸一动也不动,而他的爪子停留在戒指上,男孩把手指伸出了戒指,发现戒指就停留在空中并没有掉落,而围绕在两人周围火焰慢慢的熄灭,最後消失不见,男孩突然觉得口袋里多出东西,他摸了摸口袋发现里面有一朵木棉花
--|直到最後,那种窒息感还是存在 |-- MM.CS
>>: <Day28> Shioaji API 证券户登入 & 汇入凭证
SCADA 系统 SCADA 包含 资料收集系统 + 资料传输系统 + HMI 软件,具有资料收集...
最近有朋友回中国内地工作,刚好问我有什麽VPN推荐一下给他,需要在内地能翻墙,连脸书就可以了,了解他...
344. Reverse String 今天这一题是将一个字元阵列翻转过来,题目看似很单纯,但也有一...
首先介绍的是发音词典处理,我们必须先准备一份发音词典(lexicon),格式会长得像以下的样子。左边...
Multiple criteria filter 继众里寻它後,我们想继续看是否有各个栏位都符合关...