Как сохранить модель, загрузить и прогнозировать с помощью сохраненной модели в Tensorflow? - PullRequest
0 голосов
/ 25 октября 2019

Я новичок в Python и нейронных сетях с Tensorflow, поэтому я не знаю, как восстановить сохраненную модель и делать прогнозы. Я собрал данные с трех камер (X_test) робота, следящего за линией, и это скорость колес (слева и справа), установленная симулятором для каждого вида камеры (y_test). Мне нужно обучить нейронную сеть, чтобы прогнозировать скорость вращения колес на основе изображений с камер. Вот код:

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

x_train = np.zeros((2392,3072))
y_train = np.zeros((2392,2))
x_test = np.zeros((2392,3072))
y_test = np.zeros((2392,2))

X_1_train = np.loadtxt('X_Treinamento_3.txt')
X_2_train = np.loadtxt('X_Treinamento_4.txt')
y_1_train = np.loadtxt('Vl_Vr_Treinamento_3.txt')
y_2_train = np.loadtxt('Vl_Vr_Treinamento_4.txt')

X_1_test = np.loadtxt('X_Teste_3.txt')
X_2_test = np.loadtxt('X_Teste_4.txt')
y_1_test = np.loadtxt('Vl_Vr_Teste_3.txt')
y_2_test = np.loadtxt('Vl_Vr_Teste_4.txt')

x_train = np.concatenate((X_1_train[4:1200,:],X_2_train[4:1200,:]))/255
x_test = np.concatenate((X_1_test[4:1200,:],X_2_test[4:1200,:]))/255
y_train = np.concatenate((y_1_train[4:1200,:],y_2_train[4:1200,:]))
y_test = np.concatenate((y_1_test[4:1200,:],y_2_test[4:1200,:]))

n_inputs = 32*32*3 #3 images 32x32 pixels
n_hidden_1 = 300 # 1st layer number of neurons
n_hidden_2 = 100 # 2nd layer number of neurons
n_outputs = 2

tf.compat.v1.disable_eager_execution()
X = tf.compat.v1.placeholder("float",[None,n_inputs])
Y = tf.compat.v1.placeholder("float",[None,n_outputs])

weights = {
    'h1': tf.Variable(tf.random.normal([n_inputs, n_hidden_1],stddev=0.1)),#4 inputs 10  nodes in h1 layer
    'h2': tf.Variable(tf.random.normal([n_hidden_1, n_hidden_2],stddev=0.1)),# 10 nodes in h2 layer
    'out': tf.Variable(tf.random.normal([n_hidden_2, n_outputs],stddev=0.1))# 1 ouput label
}
biases = {
    'b1': tf.Variable(tf.random.normal([n_hidden_1])),
    'b2': tf.Variable(tf.random.normal([n_hidden_2])),
    'out': tf.Variable(tf.random.normal([n_outputs]))
}

def neural_net(x):
    #hidden layer 1
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.tanh(layer_1)#activation
    #hideen layer 2
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.tanh(layer_2)#activation
    # output layer
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return (out_layer)

Y_hat=neural_net(X)
loss_op=tf.losses.mean_squared_error(Y,Y_hat)#loss function
optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate=1e-3)  # define optimizer # play around with learning rate
train_op = optimizer.minimize(loss_op)  # minimize losss

init = tf.compat.v1.global_variables_initializer()
epoch=2000

with tf.compat.v1.Session() as sess:
    sess.run(init)
    saver = tf.compat.v1.train.Saver()
    for i in range(0,epoch):
        sess.run(train_op,feed_dict={X:x_train,Y:y_train})
        loss=sess.run(loss_op,feed_dict={X:x_train,Y:y_train})
        if(i%100==0):
            print("epoch no "+str(i),(loss))
        pred=sess.run(Y_hat,feed_dict={X:x_test})
        saver.save(sess, "output")

Итак, мне нужна ваша помощь, чтобы проверить, правильно ли я сохраняю модель, если нет, то как ее сохранить и после того, как загрузить и прогнозировать с сохраненной моделью.

1 Ответ

0 голосов
/ 25 октября 2019

Вы сохраняете его правильно, но если вы хотите сохранить больше контрольных точек (например: возможно, последняя контрольная точка переоснащается, а предыдущая контрольная точка даст лучшие результаты с тестовыми данными), чем вам нужно добавить global_step (ваши контрольные точки будут сохранены примерно какoutput-0, output-2000 и т. д.), для получения дополнительной информации смотрите здесь docs

saver.save(sess, "output", global_step = i)

Загрузка и прогнозирование в вашем случае будут выглядеть примерно так:

with tf.compat.v1.Session() as sess:
    sess.run(init)
    saver = tf.compat.v1.train.Saver()
    saver.restore(sess, "output")
    pred=sess.run(Y_hat,feed_dict={X:x_test})

«выход» - путь к сохраненной контрольной точке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...