Keras教程示例cifar10_cnn.py在windows 10上的200个时代中给出了acc:0.34 val_acc:0.40?

Keras教程示例cifar10_cnn.py在windows 10上的200个时代中给出了acc:0.34 val_acc:0.40?,keras,Keras,我正在运行来自的教程示例cifar10_cnn.py 以下是测试的环境/配置: 视窗10 Keras 1.2.0 Theano 0.8.2 Numpy 1.11.2 Enthow/Canopy/MKL(2017.0.1-1) .Theanoc[blas]ldflags-L-lmk2_rt 这个项目花了大约一天半的时间完成了200个时代。下图显示了标题和最后三个时代 使用Theano后端 X_列车外形:(50000L、32L、32L、3L) 纪元198/200 50000/50000[====

我正在运行来自的教程示例cifar10_cnn.py

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

  • 视窗10
  • Keras 1.2.0
  • Theano 0.8.2
  • Numpy 1.11.2
  • Enthow/Canopy/MKL(2017.0.1-1)
  • .Theanoc[blas]ldflags-L-lmk2_rt
这个项目花了大约一天半的时间完成了200个时代。下图显示了标题和最后三个时代

使用Theano后端

X_列车外形:(50000L、32L、32L、3L)

纪元198/200 50000/50000[======================================================================================================================================================损失:1.7894-会计科目:0.3497-会计科目:1.5930-会计科目:0.3968

纪元199/200 50000/50000[==================================================================================================================-617s-损失:1.8111-会计科目:0.3446-会计科目:1.6960-会计科目:0.3824

纪元200/200 50000/50000[======================================================================================================================================================损失:1.8005-会计科目:0.3497-会计科目:1.6164-会计科目:0.4041

我这里有两个问题:

  • 精确度(0.34/0.40)太差了。有人有类似的问题吗
  • X_train的形状在我看来很奇怪,因为 其他KERA/cifar示例给出的X_列形状为(50000,3,32,32)。如果我在代码中添加“set\u image\u dim\u ordering('th')”,形状将变为(50000,3,32,32),但程序将给出更低的精度,如“纪元80/20050000/50000-635s-损失:14.5010-acc:0.1003-瓦尔\u损失:14.5063-瓦尔\u acc:0.1000”这里如何解释set dim的效果

  • 感谢您的评论。

    这可能不是整个主题的答案,但为了获得正确的图像形状,您应该验证图像通道是形状的第一项还是最后一项。考虑到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
    
    只需传递图像的宽度和高度,它就会返回正确的形状顺序


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

    我发布的问题可能只与Keras 1.2.0有关。由于Keras已升级到2.x,官方文件cifar10_cnn.py也已更改,我发布的问题可能不会出现在新的Keras中。因此,我想结束这个问题。顺便说一句,还有一条信息是,设置图像和尺寸将创建一个不同的网络架构。以下输出显示了使用此功能与不使用此功能的区别

    使用无后端。
    使用K.set\u image\u dim\u排序(“th”)
    X_列车外形:(50000L、3L、32L、32L)
    50000列车样本
    10000个测试样本
    输入层(无、3L、32L、32L)
    卷积2D(无、32、32L、32L)
    Relu(无、32、32L、32L)
    卷积2D(无、32、30L、30L)
    Relu(无、32、30L、30L)
    MaxPoolig2D(无、32、15L、15L)
    辍学(无、32、15L、15L)
    卷积2D(无、64、15L、15L)
    Relu(无、64、15L、15L)
    卷积2D(无、64、13L、13L)
    Relu(无、64、13L、13L)
    MaxPoolig2D(无、64、6升、6升)
    辍学(无、64、6升、6升)
    展平(无,2304)
    密集型(无,512)
    Relu(无,512)
    辍学(无,512)
    密度(无,10)
    
    Softmax(无,10)
    Eduardo:谢谢你的评论。我的问题可能只与Keras 1.2.0有关。我在上面又加了一条评论。