Ошибка при проверке ввода: ожидалось, что conv1d_195_input будет иметь 3 измерения, но получен массив с формой (1229, 1)

#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>
  

Пожалуйста, сообщите нам, если проблема все еще сохраняется. Спасибо!