【问题标题】:Keras input shape ValueErrorKeras 输入形状 ValueError
【发布时间】:2017-08-14 04:55:04
【问题描述】:

我有一个问题,同时也是一个问题。我想用 Keras 制作一个图像分类器,使用 Theano 作为后端和一个顺序模型。

>>> keras.__version__
'2.0.1'  
>>> theano.__version__
'0.9.0'

我的输入形状:INPUT_SHAPE = (3, 28, 28) #depth, size, size

让我们来解决我的问题。如果我在 Windows 7 32 位上运行我的脚本,它会给我以下错误:

ValueError: ('The specified size contains a dimension with value <= 0', (-1024, 512))

如果使用输入形状运行它:INPUT_SHAPE = (28, 28, 3) #size, size, depth
它在下面给了我这个错误:

ValueError: Error when checking model input: expected conv2d_1_input to have shape (None, 48, 48, 3) but got array with shape (1000, 3, 48, 48)

如果我在 Elementary OS 64 位上运行代码,它运行没有任何问题 (INPUT_SHAPE = (3, 28, 28))。

我的 windows keras.json 文件是:

{
  "backend": "theano",
  "epsilon": 1e-07,
  "floatx": "float32",
  "image_dim_ordering": "tf"
}

所以,我的问题是:不同操作系统之间是否存在如此大的差异,或者我的错误在哪里?提醒一下,我对两个系统都使用了完全相同的代码。

【问题讨论】:

    标签: python machine-learning theano keras


    【解决方案1】:

    要切换到另一个后端,您可以更改位于以下位置的配置文件:

    • Linux:$HOME/.keras/keras.json
    • 窗口:%USER_PROFILE%/.keras/keras.json

    这是 theano 后端的 keras.json 文件:

    {
        "floatx": "float32",
        "epsilon": 1e-07,
        "backend": "theano",
        "image_data_format": "channels_first"
    }
    

    这是tensorflow 后端的keras.json 文件:

    {
        "floatx": "float32",
        "epsilon": 1e-07,
        "backend": "tensorflow",
        "image_data_format": "channels_last"
    }
    

    这是https://keras.io/backend/ 文档中关于image_data_format 属性的内容:

    image_data_format:string,"channels_last" 或 "channels_first"。 它指定 Keras 将遵循的数据格式约定。 (keras.backend.image_data_format() 回复它。)

    对于 2D 数据(例如 图像),"channels_last" 假设 (rows, cols, channels) 而 “channels_first”假定为(channels, rows, cols)。

    对于 3D 数据, "channels_last" 假定为 (conv_dim1, conv_dim2, conv_dim3, channels) 而"channels_first" 假定(channels, conv_dim1, conv_dim2, conv_dim3)。

    【讨论】:

      【解决方案2】:

      如果您的问题尚未解决,请尝试使用: from keras import backend as K K.set_image_dim_ordering('th') 如果您希望使用 theano 后端并且必须使用通道优先配置来进行图像尺寸排序,这将很有效。

      【讨论】:

        【解决方案3】:

        您遇到的问题与预期的维度排序有关。

        • Tensorflow 排序 (tf):形状应为 (size_lines,size_columns,channel)
        • Theano 排序 (th):形状应为 (channel,size_lines,size_columns)

        如果您将 keras.json 文件中的 ordering 行更改为 "image_dim_ordering": "th",它应该可以工作。 (我敢打赌,这就是您的 Elementary OS keras.json 中的内容)。

        【讨论】:

        • 感谢您的回答,对我迟到的回复感到抱歉。你仍然是对的,但我认识到我的 .keras 文件并没有改变任何东西。我在没有任何环境的情况下安装了 keras,并且有一次安装了 anaconda。在我的代码中将 image_data_format 设置为“channels_first”后,它可以正常工作。所以这完全是我的错。 :D 但是感谢您的宝贵时间。
        猜你喜欢
        • 1970-01-01
        • 2020-03-16
        • 2018-02-16
        • 2020-06-10
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        相关资源
        最近更新 更多