Тензопотоковая модель выдает размерную ошибку после создания - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть фрейм данных 110200x28 для ввода в виде ввода 100x28 (100 - временной шаг) в сеть для выполнения 1-го свертывания и, наконец, для вывода 3 целей. Поэтому я создаю следующую модель:

#building model
def build_model():
    model = models.Sequential()
    model.add(layers.InputLayer(input_shape=(100,28)))
    model.add(layers.Dense(28,activation = 'relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(0.1))
    model.add(layers.Conv1D(filters=16,kernel_size=3,strides=1,padding='same',activation='relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(0.1))
    model.add(layers.Conv1D(filters=32,kernel_size=3,strides=1,padding='same',activation='relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(0.1))
    model.add(layers.Conv1D(filters=64,kernel_size=3,strides=1,padding='same',activation='relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(0.1))
    #model.add(layers.Reshape((1,179200), input_shape=(100,28,64)))
    model.add(layers.Flatten())
    model.add(layers.Dense(3, activation = 'linear'))

    model.compile(
        optimizer='adam',
        loss=['mean_squared_error'],
        metrics=[tf.keras.metrics.RootMeanSquaredError()]
    )
    return model


model = build_model()


#train model and output
history = model.fit(
    dataframes,
    targets,
    epochs=50,
    #validation_data=(
    #   x_val,
    #   y_val
    #),
    callbacks=[keras.callbacks.EarlyStopping(
        #monitor = 'val_loss',
        patience = 4)
    ]
)
print(history.history)

, но когда я нажимаю run, она выводит эту странную ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-77-338e16e136c3> in <module>
     41     callbacks=[keras.callbacks.EarlyStopping(
     42         #monitor = 'val_loss',
---> 43         patience = 4)
     44     ]
     45 )

~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
   1152             sample_weight=sample_weight,
   1153             class_weight=class_weight,
-> 1154             batch_size=batch_size)
   1155 
   1156         # Prepare validation data.

~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
    577             feed_input_shapes,
    578             check_batch_axis=False,  # Don't enforce the batch size.
--> 579             exception_prefix='input')
    580 
    581         if y is not None:

~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    133                         ': expected ' + names[i] + ' to have ' +
    134                         str(len(shape)) + ' dimensions, but got array '
--> 135                         'with shape ' + str(data_shape))
    136                 if not check_batch_axis:
    137                     data_shape = data_shape[1:]

ValueError: Error when checking input: expected input_26 to have 3 dimensions, but got array with shape (110200, 28)

теперь из того, что я понимаю, должно быть 3-е измерение, потому что оно размер партии и автоматически определяется программой. Не могли бы вы помочь мне, может быть, определить, что не так?

1 Ответ

0 голосов
/ 07 апреля 2020

dataframes.reshape(dataframes.shape[0],dataframes.shape[1], 1) # add this line

#train model and output
history = model.fit(
    dataframes,
    targets,
    epochs=50,
    #validation_data=(
    #   x_val,
    #   y_val
    #),
    callbacks=[keras.callbacks.EarlyStopping(
        #monitor = 'val_loss',
        patience = 4)
    ]
)
print(history.history)

Ваша модель нуждается в трехмерных данных, поэтому добавьте дополнительное измерение в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...