Usando Anaconda Python 2.7 Windows 10.

Estoy entrenando a un modelo de lenguaje mediante el Keras ejemplo:

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()

Según Keras documentación, la model.fit método devuelve una Historia de devolución de llamada, que tiene una historia atributo que contiene las listas de sucesivas pérdidas y otras métricas.

hist = model.fit(X, y, validation_split=0.2)
print(hist.history)

Después de la formación de mi modelo, si me quedo print(model.history) me sale el error:

 AttributeError: 'Sequential' object has no attribute 'history'

¿Cómo puedo devolver mi modelo de la historia después de la formación de mi modelo con el código anterior?

ACTUALIZACIÓN

El problema fue que:

La siguiente tuvo que ser definido previamente:

from keras.callbacks import History 
history = History()

Las devoluciones de llamada opción tuvo que ser llamado

model.fit(X_train, Y_train, nb_epoch=5, batch_size=16, callbacks=[history])

Pero ahora si puedo imprimir

print(history.History)

devuelve

{}

aunque me encontré con una iteración.

  • Podría usted especificar si este código se ejecuta desde la consola, o no puede ejecutar la secuencia de comandos de línea de comandos (o IDE)? ¿Tiene usted acceso a hist variable después del entrenamiento?
  • Yo estoy corriendo fuera de la Anaconda. He encontrado una solución que me permite tener acceso a la hist variable. Pero siempre devuelve un vacío de la llave.
InformationsquelleAutor ishido | 2016-04-30

8 Comentarios

  1. 21

    Sólo un ejemplo, empezó desde

    history = model.fit(X, Y, validation_split=0.33, nb_epoch=150, batch_size=10, verbose=0)

    Puede utilizar

    print(history.history.keys())

    a la lista de todos los datos en la historia.

    A continuación, puede imprimir la historia de la validación de la pérdida como esta:

    print(history.history['val_loss'])
  2. 20

    Ha sido resuelto.

    Las pérdidas guardar sólo en la Historia sobre las épocas. Yo estaba corriendo iteraciones en lugar de utilizar el Keras construido en épocas opción.

    así que en lugar de hacer 4 iteraciones ahora tengo

    model.fit(......, nb_epoch = 4)

    Ahora devuelve la pérdida de cada época, de ejecución:

    print(hist.history)
    {'loss': [1.4358016599558268, 1.399221191623641, 1.381293383180471, h1.3758836857303727]}
  3. 6

    El siguiente código simple funciona muy bien para mí:

        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

    Asegúrese de asignar el ajuste de la función a una variable de salida. Entonces usted puede acceder a esa variable muy fácilmente

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

    Espero que esto ayude.
    fuente: https://keras.io/getting-started/faq/#how-can-i-record-the-training-validation-loss-accuracy-at-each-epoch

  4. 5

    El diccionario con las historias de «acc», «pérdida», etc. está disponible y se guarda en hist.history variable.

    • Si escribo «hist» en la consola solo me da el código que he utilizado en esta sesión.
    • ¿Y la hist.de la historia?
    • Hola Marcin, lo resuelto. El problema fue que las pérdidas sólo ahorrar más de las épocas, mientras que yo estaba corriendo externo iteraciones. Así que con cada iteración mi historia se borra
  5. 2

    También he encontrado que se pueden utilizar verbose=2 para hacer keras imprimir las Pérdidas:

    history = model.fit(X, Y, validation_split=0.33, nb_epoch=150, batch_size=10, verbose=2)

    Y que se imprima agradable líneas como esta:

    Epoch 1/1
    - 5s - loss: 0.6046 - acc: 0.9999 - val_loss: 0.4403 - val_acc: 0.9999

    De acuerdo a sus documentación:

    verbose: 0, 1, or 2. Verbosity mode. 0 = silent, 1 = progress bar, 2 = one line per epoch.
  6. 0

    De hecho, también se puede hacer con el método de iteración. Porque a veces nos podría necesitar el uso de la iteración del método en lugar de la incorporada en las épocas método para visualizar los resultados de la formación después de cada iteración.

    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)

    De esta manera, podrá obtener la pérdida en la que usted desea mientras que el mantenimiento de su iteración del método.

  7. 0

    Para el trazado de la pérdida directamente las siguientes obras:

    model.fit(X, Y, epochs= ... )
    plt.plot(list(model.history.history.values())[0],'k-o')

Dejar respuesta

Please enter your comment!
Please enter your name here