DAY29 CNN(卷积神经网路 续三)

昨天介绍完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

<<:  通用漏洞评分系统 (CVSS)

>>:  <Day28> Shioaji API 证券户登入 & 汇入凭证

Day4 SCADA 资料采集与监控系统 (Supervisory Control And Data Acquisition)

SCADA 系统 SCADA 包含 资料收集系统 + 资料传输系统 + HMI 软件,具有资料收集...

为什麽要使用VPN?综合3款VPN推荐给大家

最近有朋友回中国内地工作,刚好问我有什麽VPN推荐一下给他,需要在内地能翻墙,连脸书就可以了,了解他...

Leetcode 挑战 Day 09 [344. Reverse String]

344. Reverse String 今天这一题是将一个字元阵列翻转过来,题目看似很单纯,但也有一...

Day17 - 语音辨识神级工具-Kaldi part2

首先介绍的是发音词典处理,我们必须先准备一份发音词典(lexicon),格式会长得像以下的样子。左边...

Day4 Are you my destiny?

Multiple criteria filter 继众里寻它後,我们想继续看是否有各个栏位都符合关...