報錯問題:
ValueError: Negative dimension size caused by subtracting 5 from 1 for 'conv2d_1/convolution' (op: 'Conv2D') with input shapes: [?,1,28,28], [5,5,28,32].
問題分析:
定位:x_train = x_train.reshape(x_train.shape[0],1, 28,28).astype('float32')
分析:input_shape()輸入維度錯誤,tensorflow默認為channels_last數據格式[samples][rows][cols][channels]
解決方法:
方法1:backend=theano
第一步:如想要輸入數據格式為(channels,rows,cols),則文件開始位置添加下列模塊
from keras import backend as K K.set_image_dim_ordering('th')
第二步:更改代碼
x_train = x_train.reshape(x_train.shape[0],1,28,28).astype('float32')
方法2:backend=tensorflow
第一步:如想要輸入數據格式為(rows,cols,channels),則文件開始位置添加下列模塊
from keras import backend as K K.image_data_format() == "channels_last"
第二步:更改代碼
x_train = x_train.reshape(x_train.shape[0], 28,28,1).astype('float32')
總結:
最新Keras版本中圖片格式如下:
進入keras路徑 C:\Users\Mr.King\.keras(紅色為你自己的用戶名),查看keras.json文件,我的如下,這說明它默認維度類型為tf,即輸入數據格式為[samples][rows][cols][channels];
{ "floatx": "float32", "epsilon": 1e-07, "backend": "tensorflow", "image_data_format": "channels_last" }
keras中圖片維度類型分為'tf'和'th' :
backend為tensorflow時,keras.json中image_data_format為channels_last;
backend為theano時,keras.json中image_data_format為channels_first;
圖片維序類型為 th 時,即backend為Theano,則(dim_ordering='th'): 輸入數據格式為[samples][channels][rows][cols];
圖片維序類型為 tf 時,即backend為TensorFlow,則(dim_ordering='tf'): 輸入數據格式為[samples][rows][cols][channels];