我有一个问题,同时也有一个问题。我想用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"
}
所以,我的问题是:不同的操作系统之间是否有这么大的差异,或者我的错误在哪里?提醒一下,我对两个系统都使用了完全相同的代码。
答案 0 :(得分:16)
如果您的问题仍未解决,请尝试使用:
from keras import backend as K
K.set_image_dim_ordering('th')
如果您希望使用theano后端并且必须使用通道首先配置图像尺寸排序,这将很有用。
答案 1 :(得分:4)
您遇到的问题与预期的维度排序有关。
如果您将keras.json文件中的订购行更改为“image_dim_ordering”:“th”,它应该可以使用。 (我敢打赌,这就是你的小学操作系统keras.json中的内容。)
答案 2 :(得分:1)
要切换到另一个后端,您可以更改位于以下位置的配置文件:
$HOME/.keras/keras.json
%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_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)
。