Keras输入形状ValueError

时间:2017-03-22 07:42:33

标签: python machine-learning theano keras

我有一个问题,同时也有一个问题。我想用Keras制作一个图像分类器,使用Theano作为Backend和Sequential模型。

>>> 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 Bit上运行代码,它运行时没有任何问题(INPUT_SHAPE = (3, 28, 28))。

我的Windows keras.json文件是:

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

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

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:4)

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

  • Tensorflow排序(tf):预计形状为(size_lines,size_columns, channel
  • Theano排序(th):预计形状为(频道,size_lines,size_columns)

如果您将keras.json文件中的订购行更改为“image_dim_ordering”:“th”,它应该可以使用。 (我敢打赌,这就是你的小学操作系统keras.json中的内容。)

答案 2 :(得分:1)

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

  • Linux:$HOME/.keras/keras.json
  • Windows:%USER_PROFILE%/.keras/keras.json

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

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

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

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

这是文档https://keras.io/backend/关于image_data_format属性的说明:

  

image_data_formatstring"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)