Как я могу построить точность обучения, потерю обучения по эпохам в версии TensorFlow v1.x в данной программе

Я новичок в программировании тензорного потока. Я хочу построить график точности обучения, потери обучения, точности проверки и потери проверки в следующей программе. Я использую tensorflow версии 1.x в google colab. Фрагмент кода выглядит следующим образом.

# hyperparameters
n_neurons = 128  
learning_rate = 0.001  
batch_size = 128
n_epochs = 5
# parameters
n_steps = 32   
n_inputs = 32  
n_outputs = 10   
# build a rnn model
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])  
y = tf.placeholder(tf.int32, [None])  
cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons)  
output, state = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)  
logits = tf.layers.dense(state, n_outputs)  
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)  
loss = tf.reduce_mean(cross_entropy)  
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)  
prediction = tf.nn.in_top_k(logits, y, 1)  
accuracy = tf.reduce_mean(tf.cast(prediction, tf.float32))  
# input data
x_test = x_test.reshape([-1, n_steps, n_inputs]) 
# initialize the variables
init = tf.global_variables_initializer()
# train the model
with tf.Session() as sess:    sess.run(init)  
    n_batches = 100  
    for epoch in range(n_epochs):  
        for batch in range(n_batches):  
            sess.run(optimizer, feed_dict={X: x_train, y: y_train})  
            loss_train, acc_train = sess.run([loss, accuracy], feed_dict={X: 
            x_train, y: y_train})  
            print('Epoch: {}, Train Loss: {:.3f}, Train Acc: 
            {:.3f}'.format(epoch + 1, loss_train, acc_train))  
            loss_test, acc_test = sess.run([loss, accuracy], feed_dict={X: 
            x_test, y: y_test})  
            print('Test Loss: {:.3f}, Test Acc: {:.3f}'.format(loss_test, 
            acc_test))

person rajpal    schedule 19.08.2020    source источник
comment
Привет, Раджпал. Пожалуйста, окружите свой код знаком ```, чтобы он был идентифицирован как код. Также было бы полезно описать, что производит ваш текущий код и почему вы не удовлетворены этим результатом.   -  person Vivian De Smedt    schedule 19.08.2020


Ответы (1)


Как прокомментировала Вивиан, используйте ``` при размещении кода, потому что его трудно понять. Но следующий код может быть полезен:

*Примечание: здесь используется keras

acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

Здесь вы назначаете значения из обучения и проверки (для точности и потери). Я считаю, что вы уже сделали эту часть.

Следующая часть предназначена для построения этих значений

import matplotlib.pyplot as plt

epochs = range(1, len(acc) + 1)

plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()

plt.figure()

plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()

plt.show()

Это должно дать вам что-то вроде этого:

Пример значений графика (обучение, проверка и потеря

person Francisco Parrilla    schedule 19.08.2020
comment
Просто примечание. Если вы обучите модель, а затем решите обучить больше эпох, объект истории не сохранится и будет содержать данные только для второго сеанса обучения. Поэтому, если вам нужен полный набор данных, вам нужно сохранить данные из первого сеанса обучения, а затем добавить к ним новые данные. - person Gerry P; 19.08.2020
comment
Это хороший момент. Не вижу смысла его добавлять, так как человек, задавший вопрос, не указал его. - person Francisco Parrilla; 19.08.2020
comment
Спасибо за добрый ответ. После запуска кода я получил AttributeError: объект «История» не имеет атрибута «история». Это может быть потому, что я не использую fit() для обучения. Пожалуйста, помогите мне. - person rajpal; 19.08.2020
comment
Выкладываю полный код. Пожалуйста, сделайте необходимое. - person rajpal; 19.08.2020