Utilisation de Anaconda Python 2.7 Windows 10.
Je suis en train de former un modèle de langage en utilisant l'exemple de Keras:
print('Build model...')
model = Sequential()
model.add(GRU(512, return_sequences=True, input_shape=(maxlen, len(chars))))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
def sample(a, temperature=1.0):
# helper function to sample an index from a probability array
a = np.log(a) / temperature
a = np.exp(a) / np.sum(np.exp(a))
return np.argmax(np.random.multinomial(1, a, 1))
# train the model, output generated text after each iteration
for iteration in range(1, 3):
print()
print('-' * 50)
print('Iteration', iteration)
model.fit(X, y, batch_size=128, nb_Epoch=1)
start_index = random.randint(0, len(text) - maxlen - 1)
for diversity in [0.2, 0.5, 1.0, 1.2]:
print()
print('----- diversity:', diversity)
generated = ''
sentence = text[start_index: start_index + maxlen]
generated += sentence
print('----- Generating with seed: "' + sentence + '"')
sys.stdout.write(generated)
for i in range(400):
x = np.zeros((1, maxlen, len(chars)))
for t, char in enumerate(sentence):
x[0, t, char_indices[char]] = 1.
preds = model.predict(x, verbose=0)[0]
next_index = sample(preds, diversity)
next_char = indices_char[next_index]
generated += next_char
sentence = sentence[1:] + next_char
sys.stdout.write(next_char)
sys.stdout.flush()
print()
Selon la documentation de Keras, la méthode model.fit
Renvoie un rappel de l'historique, qui possède un attribut d'historique contenant les listes de pertes successives et d'autres métriques.
hist = model.fit(X, y, validation_split=0.2)
print(hist.history)
Après avoir entraîné mon modèle, si je lance print(model.history)
, le message d'erreur suivant s'affiche:
AttributeError: 'Sequential' object has no attribute 'history'
Comment puis-je retourner l'historique de mon modèle après avoir formé mon modèle avec le code ci-dessus?
MISE À JOUR
Le problème était que:
Les éléments suivants devaient d'abord être définis:
from keras.callbacks import History
history = History()
L'option callbacks devait être appelée
model.fit(X_train, Y_train, nb_Epoch=5, batch_size=16, callbacks=[history])
Mais maintenant si j'imprime
print(history.History)
il revient
{}
même si j'ai couru une itération.
C'est résolu.
Les pertes ne sauvent que l'histoire au fil des époques. J'exécutais des itérations au lieu d'utiliser l'option construite par Keras à l'époque.
donc au lieu de faire 4 itérations j'ai maintenant
model.fit(......, nb_Epoch = 4)
Maintenant, il retourne la perte pour chaque époque:
print(hist.history)
{'loss': [1.4358016599558268, 1.399221191623641, 1.381293383180471, h1.3758836857303727]}
Juste un exemple a commencé à partir de
history = model.fit(X, Y, validation_split=0.33, nb_Epoch=150, batch_size=10, verbose=0)
Vous pouvez utiliser
print(history.history.keys())
pour lister toutes les données de l'historique.
Ensuite, vous pouvez imprimer l’historique de la perte de validation comme ceci:
print(history.history['val_loss'])
Le code simple suivant fonctionne très bien pour moi:
seqModel =model.fit(x_train, y_train,
batch_size = batch_size,
epochs = num_epochs,
validation_data = (x_test, y_test),
shuffle = True,
verbose=0, callbacks=[TQDMNotebookCallback()]) #for visualization
Assurez-vous d’affecter la fonction d’ajustement à une variable de sortie. Ensuite, vous pouvez accéder à cette variable très facilement
# visualizing losses and accuracy
train_loss = seqModel.history['loss']
val_loss = seqModel.history['val_loss']
train_acc = seqModel.history['acc']
val_acc = seqModel.history['val_acc']
xc = range(num_epochs)
plt.figure()
plt.plot(xc, train_loss)
plt.plot(xc, val_loss)
J'espère que cela t'aides. source: https://keras.io/getting-started/faq/#how-can-i-record-the-training-validation-loss-accuracy-at-each-Epoch
Le dictionnaire avec des historiques de "acc", "perte", etc. est disponible et sauvegardé dans hist.history
variable.
CSVLogger est une autre option: https://keras.io/callbacks/#csvlogger . Il crée un fichier csv ajoutant le résultat de chaque époque. Même si vous interrompez l'entraînement, vous pouvez voir comment il a évolué.
J'ai également constaté que vous pouvez utiliser verbose=2
pour que les keras impriment les pertes:
history = model.fit(X, Y, validation_split=0.33, nb_Epoch=150, batch_size=10, verbose=2)
Et cela afficherait de jolies lignes comme ceci:
Epoch 1/1
- 5s - loss: 0.6046 - acc: 0.9999 - val_loss: 0.4403 - val_acc: 0.9999
Selon leur documentation :
verbose: 0, 1, or 2. Verbosity mode. 0 = silent, 1 = progress bar, 2 = one line per Epoch.
En fait, vous pouvez également le faire avec la méthode d'itération. Parce que nous avons parfois besoin d’utiliser la méthode des itérations au lieu de la méthode des époques intégrée pour visualiser les résultats de l’entraînement après chaque itération.
history = [] #Creating a empty list for holding the loss later
for iteration in range(1, 3):
print()
print('-' * 50)
print('Iteration', iteration)
result = model.fit(X, y, batch_size=128, nb_Epoch=1) #Obtaining the loss after each training
history.append(result.history['loss']) #Now append the loss after the training to the list.
start_index = random.randint(0, len(text) - maxlen - 1)
print(history)
Cela vous permet d’obtenir la perte que vous souhaitez tout en maintenant votre méthode d’itération.
Pour tracer la perte directement les travaux suivants:
model.fit(X, Y, epochs= ... )
plt.plot(list(model.history.history.values())[0],'k-o')