J'ai le modèle suivant et l'ensemble de données contient 186093 séries chronologiques où chaque série chronologique a une longueur de 48

Tensorflow version 2.x

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv1D(30, 4, activation=tf.nn.selu, input_shape=(train_data.shape[1], train_data.shape[0])),
    tf.keras.layers.MaxPooling1D(3),
    tf.keras.layers.Conv1D(15, 2, padding='same', activation=tf.keras.activations.selu),
    tf.keras.layers.MaxPooling1D(3),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation=tf.keras.activations.relu),
    tf.keras.layers.Dense(1, activation=tf.keras.activations.sigmoid)
])

Et le résumé du modèle est le suivant

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d (Conv1D)              (None, 45, 30)            22331190  
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 15, 30)            0         
_________________________________________________________________
conv1d_1 (Conv1D)            (None, 15, 15)            915       
_________________________________________________________________
max_pooling1d_1 (MaxPooling1 (None, 5, 15)             0         
_________________________________________________________________
flatten (Flatten)            (None, 75)                0         
_________________________________________________________________
dense (Dense)                (None, 128)               9728      
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 129       
=================================================================
Total params: 22,341,962
Trainable params: 22,341,962
Non-trainable params: 0

Cependant, lorsque j'essaie d'entraîner le modèle comme ci-dessous

model.fit(train_data, train_result, epochs=2000, validation_split=0.2, verbose=0, callbacks=[early_stop])

Je reçois l'erreur suivante

ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (186093, 48)

J'ai essayé de changer le input_shape en (Aucun, 48) car j'ai 48 fonctionnalités. Mais alors je ne peux même pas créer le modèle car il génère une erreur ci-dessous

ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.

Quelqu'un peut-il m'aider à comprendre ce que je fais de mal ici ou ce qui manque?

0
Thusitha Thilina Dayaratne 30 janv. 2020 à 08:45

1 réponse

Meilleure réponse

Le problème réside simplement dans la forme de vos données.

Tout d'abord, je suppose que train_data.shape[0] donne 186093. C'est le nombre d'échantillons discrets. Ce n'est pas le nombre de caractéristiques dans un seul échantillon.

Remplacez donc input_shape=(train_data.shape[1], train_data.shape[0]) par input_shape=(train_data.shape[1], 1)

Prochain,

Conv1D (lorsqu'il est utilisé pour les séries temporelles) attend des données de la forme [batch_size, timesteps, features]. Dans votre cas, features est 1.

Vous pouvez donc définir la forme correcte comme suit (en supposant que vous utilisez numpy) :

train_data = np.expand_dims(train_data, axis=-1)

Ajoutez cette ligne avant d'appeler model.fit()

1
Susmit Agrawal 30 janv. 2020 à 07:16