Nouveau à Keras et construisant un réseau neuronal avec deux couches denses. Il y a trop de données à conserver en mémoire, j'utilise donc la fonction fit_generator, mais j'obtiens l'erreur ValueError: No data provided for "dense_2". Need data for each key in: ['dense_2']. Petit exemple ci-dessous :

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

model = Sequential([
    Dense(100, input_shape=(1924800,), activation='relu'),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

def generate_arrays_from_files(path, batch_size=50):
    while True:
        # Do things....
        yield ({'dense_1_input': np.asarray(outdata)}, {'output': np.asarray(outlabels)})

model.fit_generator(generate_arrays_from_files(path), steps_per_epoch=5, epochs=10)

Edit : j'ai oublié la ligne de compilation

0
tennoshi 24 janv. 2020 à 18:56

1 réponse

Meilleure réponse

Vous n'avez pas besoin de spécifier la couche dans l'entrée, et vous n'aurez évidemment pas besoin de transmettre des données à la deuxième couche dense. Notez qu'il est préférable d'utiliser un générateur Keras, vous pouvez en créer un personnalisé comme ceci ou utiliser une norme un.

Vous devez également compiler votre modèle.

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

model = Sequential([
    Dense(100, input_shape=(1924800,), activation='relu'),
    Dense(1, activation='sigmoid')
])

optimizer = keras.optimizers.Adam(lr=1e-3)
model.compile(loss='binary_crossentropy',
              optimizer=optimizer,
              metrics=['accuracy'])

def generate_arrays_from_files(path, batch_size=50):
    while True:
        # Do things....
        yield np.asarray(outdata), np.asarray(outlabels)

model.fit_generator(generate_arrays_from_files(path), steps_per_epoch=5, epochs=10)

Est-il normal de fournir un vecteur de (1924800,) au modèle d'ailleurs ?

0
Orphee Faucoz 24 janv. 2020 à 16:09