Keras 教程示例 cifar10_cnn.py 在 windows 10 上的 200 个 epoch 中给出 acc: 0.34 val_acc: 0.40?
Posted
技术标签:
【中文标题】Keras 教程示例 cifar10_cnn.py 在 windows 10 上的 200 个 epoch 中给出 acc: 0.34 val_acc: 0.40?【英文标题】:Keras Tutorial Example cifar10_cnn.py gives acc: 0.34 val_acc: 0.40 in 200 epochs on windows 10? 【发布时间】:2017-05-16 04:41:22 【问题描述】:我正在运行来自here 的教程示例 cifar10_cnn.py。
这是测试的环境/配置:
Windows 10 Keras 1.2.0 Theano 0.8.2 Numpy 1.11.2 Enthought/Canopy/MKL(2017.0.1-1) .theanorc [blas] ldflags -L... -lmk2_rt该程序大约用了一天半的时间完成了 200 个 epoch。下图展示了header和最后三个epoch。
使用 Theano 后端
X_train 形状:(50000L, 32L, 32L, 3L) ...
198/200 纪元 50000/50000 [==============================] - 639s - 损失:1.7894 - acc:0.3497 - val_loss:1.5930 - val_acc: 0.3968
199/200 纪元 50000/50000 [===============================] - 617s - 损失:1.8111 - acc:0.3446 - val_loss:1.6960 - val_acc: 0.3824
200/200 纪元 50000/50000 [===============================] - 612s - 损失:1.8005 - acc:0.3497 - val_loss:1.6164 - val_acc: 0.4041
我有两个问题:
-
精度(0.34/0.40)太差了。有没有人有类似的问题?
X_train 的形状为 (50000, 32, 32, 3) 对我来说似乎很奇怪,因为
其他 keras/cifar 示例将 X_train 的形状定义为 (50000, 3, 32, 32)。如果我将 "set_image_dim_ordering('th')" 添加到代码中,形状将变为 (50000, 3, 32, 32) 但程序会给出更低的准确度如“Epoch 80/200 50000/50000 - 635s - loss: 14.5010 - acc: 0.1003 - val_loss: 14.5063 - val_acc: 0.1000” 如何在这里解释 set dim 的效果?
感谢任何cmets。
【问题讨论】:
【参考方案1】:这可能不是整个主题的答案,但为了获得正确的图像形状,您应该只验证图像通道是形状的第一项还是最后一项。考虑到 Keras 2,您可以通过以下方式进行操作:
from keras import backend as K
def image_input_shape(img_width, img_height):
if K.image_data_format() == 'channels_first':
input_shape = (3, img_width, img_height)
else:
input_shape = (img_width, img_height, 3)
return input_shape
只需传递图像的宽度和高度,它就会返回正确的形状顺序。
您可以从那里丢弃或验证您对“奇怪”形状的假设。
【讨论】:
Eduardo:感谢您的 cmets。我的问题可能仅与 Keras 1.2.0 有关。我在上面又添加了一条评论。【参考方案2】:我发布的问题可能仅与 Keras 1.2.0 有关。由于 Keras 已经升级到 2.x 并且官方文件 cifar10_cnn.py 也发生了变化,所以我发布的问题在新的 Keras 中可能不会发生。因此,我想关闭这个问题。顺便说一句,还有一条信息是 set_image_dim_ordering 将创建不同的网络架构。下面的输出显示了有这个函数和没有这个函数的区别。
Using Theano backend.
with K.set_image_dim_ordering('th')
X_train shape: (50000L, 3L, 32L, 32L)
50000 train samples
10000 test samples
InputLayer (None, 3L, 32L, 32L)
Convolution2D (None, 32, 32L, 32L)
Relu (None, 32, 32L, 32L)
Convolution2D (None, 32, 30L, 30L)
Relu (None, 32, 30L, 30L)
MaxPooling2D (None, 32, 15L, 15L)
Dropout (None, 32, 15L, 15L)
Convolution2D (None, 64, 15L, 15L)
Relu (None, 64, 15L, 15L)
Convolution2D (None, 64, 13L, 13L)
Relu (None, 64, 13L, 13L)
MaxPooling2D (None, 64, 6L, 6L)
Dropout (None, 64, 6L, 6L)
Flatten (None, 2304)
Dense (None, 512)
Relu (None, 512)
Dropout (None, 512)
Dense (None, 10)
Softmax (None, 10)
Using Theano backend.
without K.set_image_dim_ordering('th')
X_train shape: (50000L, 32L, 32L, 3L)
50000 train samples
10000 test samples
InputLayer (None, 32L, 32L, 3L)
Convolution2D (None, 32L, 32L, 32)
Relu (None, 32L, 32L, 32)
Convolution2D (None, 30L, 30L, 32)
Relu (None, 30L, 30L, 32)
MaxPooling2D (None, 15L, 15L, 32)
Dropout (None, 15L, 15L, 32)
Convolution2D (None, 15L, 15L, 64)
Relu (None, 15L, 15L, 64)
Convolution2D (None, 13L, 13L, 64)
Relu (None, 13L, 13L, 64)
MaxPooling2D (None, 6L, 6L, 64)
Dropout (None, 6L, 6L, 64)
Flatten (None, 2304)
Dense (None, 512)
Relu (None, 512)
Dropout (None, 512)
Dense (None, 10)
Softmax (None, 10)
【讨论】:
以上是关于Keras 教程示例 cifar10_cnn.py 在 windows 10 上的 200 个 epoch 中给出 acc: 0.34 val_acc: 0.40?的主要内容,如果未能解决你的问题,请参考以下文章
小白学习keras教程二基于CIFAR-10数据集训练简单的MLP分类模型
小白学习keras教程六基于CIFAR-10数据集训练CNN-RNN神经网络模型
Keras - .flow_from_directory(目录)