Keras教程示例cifar10_cnn.py在Windows 10的200个历元中给出acc:0.34 val_acc:0.40?

时间:2017-01-02 01:58:25

标签: keras

我正在运行here中的教程示例cifar10_cnn.py。

以下是测试的环境/配置:

  • Windows 10
  • Keras 1.2.0
  • Theano 0.8.2
  • Numpy 1.11.2
  • Enthought /敞篷/ MKL(2017.0.1-1)
  • .theanorc [blas] ldflags -L ... -lmk2_rt

该计划花了大约一天半的时间来完成200个时代。下图显示了标题和最后三个时期。

  

使用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

     

Epoch 200/200   50000/50000 [==============================] - 612s - 损失:1.8005 - acc:0.3497 - val_loss:1.6164 - val_acc:0.4041

我在这里有两个问题:

  1. 准确度(0.34 / 0.40)太糟糕了。有没有人有类似的问题?
  2. X_train的形状为(50000,32,32,3)对我来说似乎很奇怪,因为 其他keras / cifar示例将X_train的形状赋予(50000,3,32,32)。如果我将&#34; set_image_dim_ordering(&#39; th&#39;)&#34; 添加到代码中,形状将变为(50000,3,32,32)< / strong>但该计划将提供更低的准确度&#34; 大纪元80/200 50000/50000 - 635s - 损失:14.5010 - acc:0.1003 - val_loss: 14.5063 - val_acc:0.1000 &#34;如何解释这里设置昏暗的效果?
  3. 感谢您提出任何意见。

2 个答案:

答案 0 :(得分: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

只需传递图像的宽度和高度,它就会返回正确的形状排序。

从那里你可以丢弃或验证你对“奇怪”形状的假设。

答案 1 :(得分:0)

我发布的问题可能只与Keras 1.2.0有关。由于Keras升级到2.x并且官方文件cifar10_cnn.py也发生了变化,我发布的问题可能不会发生在新的Keras中。因此,我想结束这个问题。另外,还有一个信息是set_image_dim_ordering将创建一个不同的网络架构。以下输出显示与此功能的区别,并且没有此功能。

&#13;
&#13;
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)
&#13;
&#13;
&#13;

&#13;
&#13;
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)
&#13;
&#13;
&#13;