ValueError:检查输入时出错:预期conv1d_1_input有3个维度,但得到的数组是否有形状(500000,3253)?

时间:2017-07-26 11:36:41

标签: deep-learning keras-layer

我想用卷积神经网络训练我的数据,我已经重塑了我的数据: 这些是我用过的参数:

'x_train.shape'=(500000, 3253)
'y_train.shape', (500000,)
'y_test.shape', (20000,)
'y_train[0]', 97
'y_test[0]', 99
'y_train.shape', (500000, 256)
'y_test.shape', (20000, 256)

这是我定义模型架构的方式:

# 3. Define model architecture

model = Sequential()

model.add(Conv1D(64, 8, strides=1, padding='valid',
                        dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform',
                        bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None,
                        activity_regularizer=None, kernel_constraint=None, bias_constraint=None, input_shape=x_train.shape))        
print('***DONE***')
###### input_traces=N_Features  
###### input_shape=(batch_size, trace_lenght,num_of_channels)           
model.add(MaxPooling1D(pool_size=2,strides=None, padding='valid',input_shape=x_train.shape))
print('***DONE***')
model.add(Flatten())
print('***DONE***')
model.add(Dropout(0.5))
print('***DONE***')
#print(model.summary())
model.add(Dense(1, activation='relu'))
print('***DONE***')

# # # 4. Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# # # # # 5. Fit model on training data
model.fit(x_train, y_train, batch_size=100, epochs=500,verbose=2)

结果是:

........
***DONE***
***DONE***
Traceback (most recent call last):
  File "CNN_Based_Attack.py", line 128, in <module>
    model.fit(x_train, y_train, batch_size=100, epochs=500,verbose=2)
  File "/home/meriem/.local/lib/python2.7/site-packages/keras/models.py", line 853, in fit
    initial_epoch=initial_epoch)
  File "/home/meriem/.local/lib/python2.7/site-packages/keras/engine/training.py", line 1424, in fit
    batch_size=batch_size)
  File "/home/meriem/.local/lib/python2.7/site-packages/keras/engine/training.py", line 1300, in _standardize_user_data
    exception_prefix='input')
  File "/home/meriem/.local/lib/python2.7/site-packages/keras/engine/training.py", line 127, in _standardize_input_data
    str(array.shape))
ValueError: Error when checking input: expected conv1d_1_input to have 3 dimensions, but got array with shape (500000, 3253)

我遇到的错误是重塑我的数据,在第5步中:

   # # # # # 5. Fit model on training data
    model.fit(x_train, y_train, batch_size=100, epochs=500,verbose=2)

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

输入形状错误,对于Theano应为input_shape =(1,3253),对于TensorFlow应为(3253,1)。输入形状不包括样本数。

然后,您需要重塑数据以包含通道轴:

x_train = x_train.reshape((500000, 1, 3253))

如果使用TensorFlow,则将通道尺寸移动到末尾。在这些变化之后它应该有效。

答案 1 :(得分:0)

input_shape = (3253, 1)

这必须是第一卷积层Conv1D的Input_shape

model.fit()出现错误,因为您仍未建立模型。