#python #tensorflow #keras
#python #тензорный поток #keras
Вопрос:
Моя текущая проблема заключается в изменении формы моего массива, для которого я продолжаю получать ошибку
Ошибка при проверке ввода: ожидаемый conv1d_267_input должен иметь форму (1229, 1), но получен массив с формой (1, 1)
Мой код приведен ниже, для которого я создал следующий мини-пример:
Xtrain = np.expand_dims(np.random.normal(size=(1229, 1)),axis=-1)
Ytrain = np.random.choice([0,1], size=(1229,))
lr = 0.0001
def model():
n_timesteps =X_train.shape[0]
n_features = X_train.shape[1]
n_outputs = 1
inputA = keras.layers.Input(shape=X_train.shape[1:])
x = keras.models.Sequential()
x.add(keras.layers.Conv1D(64, 3, activation='relu', input_shape=(n_timesteps, n_features)))
x.add(keras.layers.Conv1D(64, 3, activation='relu'))
x.add(keras.layers.MaxPooling1D(3))
x.add(keras.layers.Conv1D(128, 3, activation='relu'))
x.add(keras.layers.Conv1D(128, 3, activation='relu'))
x.add(keras.layers.Flatten())
x.add(keras.layers.Dense(n_outputs, activation = 'relu'))
x.compile(loss='binary_crossentropy',
optimizer=Adam(lr=lr),
metrics=['accuracy'])
print(x.summary())
return x
model = model()
model.fit(X_train, y_train)
Заранее благодарю вас за помощь.
Редактировать: форма ввода моей последовательности / массива равна (100000,1).
Комментарии:
1. Каковы формы объектов, которые вы передаете в сеть? Например, изображения для сети классификаторов могут иметь форму (28,28,1).
2. нет. в моем случае я работаю с последовательными данными, которые имеют форму (10000,1).
Ответ №1:
Форма ввода должна быть равна форме каждого отдельного ввода, например, X_train[0] = [-0.42076894]
, then X_train[0].shape = (1, 1)
. Форма ввода должна быть такой же, как у X_train[0].shape .
Пожалуйста, найдите рабочий код ниже:
X_train = np.expand_dims(np.random.normal(size=(1229, 1)),axis=-1)
Y_train = np.random.choice([0,1], size=(1229,))
lr = 0.0001
def model():
n_outputs = 1
x = keras.models.Sequential()
x.add(keras.layers.Conv1D(64, 3, activation='relu',padding='same', input_shape=(X_train.shape[1],X_train.shape[2])))
x.add(keras.layers.Conv1D(64, 3, activation='relu',padding='same',))
x.add(keras.layers.MaxPooling1D(1))
x.add(keras.layers.Conv1D(128, 3, activation='relu',padding='same',))
x.add(keras.layers.Conv1D(128, 3, activation='relu',padding='same',))
x.add(keras.layers.Flatten())
x.add(keras.layers.Dense(n_outputs, activation = 'relu'))
x.compile(loss='binary_crossentropy',
optimizer=tf.optimizers.Adam(lr=lr),
metrics=['accuracy'])
print(x.summary())
return x
model = model()
model.fit(X_train, Y_train)
Вывод выглядит следующим образом:
Model: "sequential_21"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d_67 (Conv1D) (None, 1, 64) 256
conv1d_68 (Conv1D) (None, 1, 64) 12352
max_pooling1d_15 (MaxPoolin (None, 1, 64) 0
g1D)
conv1d_69 (Conv1D) (None, 1, 128) 24704
conv1d_70 (Conv1D) (None, 1, 128) 49280
flatten_15 (Flatten) (None, 128) 0
dense_14 (Dense) (None, 1) 129
=================================================================
Total params: 86,721
Trainable params: 86,721
Non-trainable params: 0
_________________________________________________________________
None
39/39 [==============================] - 1s 8ms/step - loss: 1.9266 - accuracy: 0.5159
<keras.callbacks.History at 0x7fa601a1c710>
Пожалуйста, сообщите нам, если проблема все еще сохраняется. Спасибо!