神经网络图像识别或分类问题该怎么玩step2
Posted 千古侠客文人梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络图像识别或分类问题该怎么玩step2相关的知识,希望对你有一定的参考价值。
一、接续上文,继续前向传播计算
计算得到输出层结果后。再回首一下这张图:
图1
为了和后面的内容有所区别(softmax是sigmoid的多分类问题推广),我们使用图二的前向传播过程。
图2
前项传播,我们只是得到了y,那么我们来看看y是什么吧。y是一个num_example*10的张量。解释一下吧,第一行就是第一个样本经过三层网络计算后得到10个类别的预测值predictions。如下图:
图3
然后我们需要根据该样本的标签来确定这10个类别中,该样本对应的类别的预测值。那么具体该怎么做呢?先看标签值,step1中我已经说了,mnist数据集中的标签不是我们想要的标签,但我们必须根据Mnist数据集中的标签来构建一个标准化的标签。
num_examples = data.shape[0]
num_labels = layers[-1]
bitwise_labels = np.zeros((num_examples,num_labels))
for example_index in range(num_examples):
bitwise_labels[example_index][label[example_index][0]]=1
解释一下:①初始化一个标签如下图
图4
②我们需要制作的标签如下图:
图5
整个制作过程也非常的简单:就是label标签对应的样本的值,刚好作为新标签的赋值索引下标。
Attention Please:红色框住的就是我们的标签张量,其他的都是为了辅助说明的。
二、计算LOSS
在回首-log(x)函数图像
我们使用图5和图3得到样本的p’ 然后根据-log(p')构建损失函数图像原理,p’越大,也就是分类越正确,损失函数的损失值越小。
prediction = feedforward_propagation(data,thetas,layers)
num_examples = data.shape[0]
num_labels = layers[-1]
bitwise_labels = np.zeros((num_examples,num_labels))
for example_index in range(num_examples):
bitwise_labels[example_index][label[example_index][0]]=1
bit_set_loss = -np.sum(np.log(predictions[bitwise_labels == 1]))
bit_not_set_loss = -np.sum(np.log(predictions[bitwise_labels==0]))
loss = (1/num_examples)*(bit_set_loss+bit_not_set_loss)
return loss
到此为止前项传播结束。
偏置项b的作用参考如下博文,作者写的非常详细。
https://mp.weixin.qq.com/s/Jg3V1xkK1raeWMuUK4J_wA.
未完待续《神经网络图像识别或分类问题该怎么玩step3》
以上是关于神经网络图像识别或分类问题该怎么玩step2的主要内容,如果未能解决你的问题,请参考以下文章