科普: 人工神经网络 VS 生物神经网络-Keras 快速搭建神经网络 (莫烦 Python 教程)
热门回复:
- 就是一个傻猪:莫烦,教我们写sci吧!开讲座吧
- 1265961798:我想看莫烦出一个自然语言处理方面的视频
- 薛定谔的萌猫:P11:CNN卷积神经网络 里面有一个失之毫厘,谬以千里的小错误 @莫烦Python:
input_shape是(1, 28, 28),但是keras的Conv2D层,默认的RGB通道是在最后一维的,也就是(28, 28, n)。
因此在视频里的数据输入是不对的,相当于把其中一个28当成了28个颜色通道,然后输入是1*28的一条图片。至于为什么还是有那么高的准确率,我觉得其一是CNN的机制是会把不同通道求和处理的,因此还是能获得特征信息,其次就是深度学习炼金术的神奇了[微笑]。
正确的写法应该是:在Conv2D层添加参数:data_format="channels_first" 或者把图片reshape成(-1, 28, 28, 1),因为根据keras文档 https://keras.io/layers/convolutional/,Conv2D层默认的输入是channels_last,也就是(28, 28, 1)这样的格式。
另注:
补充一下是怎么发现这个错误的,在train模型之前,看一下model.summary()中的维度,发现是:
_________________________________________________________________
Layer (type) Output Shape Param #
conv2d_29 (Conv2D) (None, 1, 28, 32) 22432
_________________________________________________________________
activation_43 (Activation) (None, 1, 28, 32) 0
_________________________________________________________________
max_pooling2d_24 (MaxPooling (None, 1, 14, 32) 0
...
...
正常情况下,MaxPooling会把图片的长宽都缩小,没有理由出现(None, 1, 28, 32), (None, 1, 14, **)这样的维度,因此可以认为计算机把那个1维度当成了图片的维度,而非颜色通道的维度。因此是错误的。
- 乒乒乓乓66:https://github.com/MorvanZhou/tutorials/tree/master/kerasTUT
代码在这里
- TrashSir:morvan大佬,keras版本更新了么?还是因为我的backend是采用的tensorflow?怎么定义的好多参数名都不一样啊,SimpleRNN那里完全没看懂参数名怎么对应的