2017-03-22 90 views
3

我有一個問題,並在同一時間的問題。我想使用Theano作爲Backend和Sequential模型來製作Keras圖像分類器。Keras輸入形狀ValueError

>>> 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))。

窗戶我keras.json文件是:

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

所以,我的問題是:是否有不同的操作系統之間如此大的差異或者是我的錯?提醒一下,我爲這兩個系統使用了完全相同的代碼。

回答

11

如果問題沒有解決請嘗試使用: from keras import backend as K K.set_image_dim_ordering('th') 如果你想使用theano後端並有能力使用渠道第一配置的圖像尺寸訂購這會工作良好。

3

您遇到的問題與預期的維度排序有關。

  • Tensorflow排序(TF):形狀預計將(size_lines,size_columns,通道
  • Theano訂貨(TH):形狀預計是(通道,size_lines,size_columns)

如果您更改keras.json文件「image_dim_ordering」的訂購熱線:「TH」它應該工作。 (我敢打賭,這是你的基本操作系統keras.json中的)。

+1

感謝您的回答,並對我遲到的回覆感到抱歉。你還是對的,但我意識到我的.keras文件不會改變任何東西。我沒有任何envs安裝keras,一次安裝了anaconda。在我的代碼中將image_data_format設置爲'channels_first'後,它沒有任何問題。所以這完全是我的錯。 :D但是謝謝你的時間。 – Dragonblf

0

切換到另一個後端可以更改位於配置文件:

  • 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()返回它。)

對於二維數據(例如 圖像),"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)

相關問題