Comment prédire les valeurs avec une formation Tensorflow modèle
J'ai formé mon NN en Tensorflow et sauvé le modèle comme ceci:
def neural_net(x):
layer_1 = tf.layers.dense(inputs=x, units=195, activation=tf.nn.sigmoid)
out_layer = tf.layers.dense(inputs=layer_1, units=6)
return out_layer
train_x = pd.read_csv("data_x.csv", sep=" ")
train_y = pd.read_csv("data_y.csv", sep=" ")
train_x = train_x / 6 - 0.5
train_size = 0.9
train_cnt = int(floor(train_x.shape[0] * train_size))
x_train = train_x.iloc[0:train_cnt].values
y_train = train_y.iloc[0:train_cnt].values
x_test = train_x.iloc[train_cnt:].values
y_test = train_y.iloc[train_cnt:].values
x = tf.placeholder("float", [None, 386])
y = tf.placeholder("float", [None, 6])
nn_output = neural_net(x)
cost = tf.reduce_mean(tf.losses.mean_squared_error(labels=y, predictions=nn_output))
optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)
training_epochs = 5000
display_step = 1000
batch_size = 30
keep_prob = tf.placeholder("float")
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(training_epochs):
total_batch = int(len(x_train) / batch_size)
x_batches = np.array_split(x_train, total_batch)
y_batches = np.array_split(y_train, total_batch)
for i in range(total_batch):
batch_x, batch_y = x_batches[i], y_batches[i]
_, c = sess.run([optimizer, cost],
feed_dict={
x: batch_x,
y: batch_y,
keep_prob: 0.8
})
saver.save(sess, 'trained_model', global_step=1000)
Maintenant je veux utiliser le modèle appris dans un fichier différent. Bien sûr, il ya de nombreux de nombreux exemples de restaurer et sauver le modèle, je suis passé par beaucoup d'entre eux. Pourtant, je ne pouvais pas le faire tout de leur travail, il y a toujours une erreur. C'est donc mon fichier de restauration, pourriez-vous m'aider à le faire restaurer le modèle enregistré?
saver = tf.train.import_meta_graph('trained_model-1000.meta')
y_pred = []
with tf.Session() as sess:
saver.restore(sess, tf.train.latest_checkpoint('./'))
sess.run([y_pred], feed_dict={x: input_values})
E. g. cette tentative m'a donné le message d'erreur "La session graphique est vide. Les opérations d'ajout du graphique avant d'appeler run()." Alors, quelle opération dois-je ajouter à la graphique, et comment? Je ne sais pas ce que l'opération doit être dans mon modèle... je ne comprends pas ce concept de sauvegarde/restauration dans Tensorflow. Ou dois-je faire de la restauration d'une manière complètement différente? Merci à l'avance!
saver = tf.train.import_meta_graph('trained_model-1000.meta')
dans le with tf.Session() as sess:
? Peut-être avec tf.reset_default_graph()
avant que juste pour être sûr...Salut, oui, c'est résolu cette erreur particulière, merci. Mais le modèle n'est pas encore bien rétabli. J'ai mis à jour le code, donc il n'y a plus de contexte.
Ou peut-être que c'est restaurée, mais je ne sais pas comment l'utiliser pour faire de nouvelles prédictions.
Existe-il des mises à jour sur la façon de gérer cela?
Vous devez définir
neural_net(x)
de la même façon que dans le dossier de formation, puis restaurer ses données de la manière que dans ma question ou dans le CAta.RAy réponse ci-dessous. Puis vous le prédire, comme dans Alli Abbasi réponse.
OriginalL'auteur T.Poe | 2017-10-12
Vous devez vous connecter pour publier un commentaire.
Pardonnez-moi si je me trompe mais
tf.train.Saver()
enregistre uniquement les valeurs des variables de ne pas le graphe lui-même. Cela signifie que si vous voulez charger le modèle dans un fichier différent, vous devez reconstruire le graphique ou en quelque sorte charger le graphique. Tensorflow états de documentation:Considérons l'exemple suivant:
Un fichier qui enregistre le modèle:
L'autre fichier qui se charge préalablement enregistré modèle:
v1, v2
qui sont enregistrés, puis lire. Je comprends cela. Ce que je ne comprends pas est qu'est-ce que cela a sauvé de "variable" dans mon code? J'ai mis à jour le code, donc il n'y a plus de contexte.Ce qui a sauvé variable? Lorsque enregistrez un modèle, il enregistre uniquement les valeurs affectées à chaque tensorflow valeur dans la session en cours. Si vous souhaitez restaurer ce modèle dans une autre session, vous aurez à reconstruire le graphe de cette session. Si la réponse a été utile, s'il vous plaît marquer une réponse beaucoup de temps passe en répondant à ces questions 😉
Comme je l'ai dit, votre code est un exemple exactement même que des dizaines d'autres (en fait copier coller de l'original tensorflow tutoriel qui, bien sûr, j'ai déjà vu). Mais je ne sais pas encore "Comment prédire les valeurs d'un modèle appris", qui est la question d'origine, donc je ne peux pas le marquer comme réponse, encore merci.
Vous voulez dire que si je veux reconstruire le modèle dans une autre session, je dois réécrire tous les codes de la construction du graphe? Comme "x=tf.espace réservé(quelque chose)" et "layer = tf.nn.conv2d(entrée=x)"? Est-il possible que je peux aussi charger le graphique de la structure de fichiers?
OriginalL'auteur Lasse Jacobs
Où
nn_output
est le nom de la variable de sortie de la dernière couche de réseau. Vous pouvez vous sauver de la variable à l'aide de:et, par conséquent, dans votre code:
devrait être :
La restauration:
Maintenant, vous devriez avoir accès à ce nœud du graphe. Si le nom n'est pas spécifié, il est difficile de récupérer cette couche particulière.
OriginalL'auteur CAta.RAy
Vous pouvez savoir utiliser
tf.saved_model.builder.SavedModelBuilder
fonction.Les grandes lignes de l'économie:
Un code pour enregistrer le modèle :
Un code pour restaurer le modèle :
OriginalL'auteur Ismaïla