ValueError: Ошибка при проверке ввода: ожидалось, что conv1d_1_input будет иметь 3 измерения, но получил массив с формой (500000, 3253)?
Я хочу тренировать свои данные с помощью сверточной нейронной сети, я изменил свои данные: это параметры, которые я использовал:
'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)
Как мне решить эту проблему?
1 ответ
Форма ввода неверна, она должна быть input_shape = (1, 3253) для Theano или (3253, 1) для TensorFlow. Форма ввода не включает количество образцов.
Затем вам нужно изменить ваши данные, чтобы включить ось каналов:
x_train = x_train.reshape((500000, 1, 3253))
Или переместите измерение каналов до конца, если вы используете TensorFlow. После этих изменений должно работать.
input_shape = (3253, 1)
это должно быть Input_shape первого слоя свертки Conv1D
У вас ошибка с model.fit()
Потому что вы еще не построили свою модель.