Ich möchte den is_training
Zustand des Modells zu False
nach dem Training, wie könnte ich das tun?Turn is_training von batchnorm (TensorFlow) zu False
net = tf.layers.conv2d(inputs = features, filters = 64, kernel_size = [3, 3], strides = (2, 2), padding = 'same')
net = tf.contrib.layers.batch_norm(net, is_training = True)
net = tf.nn.relu(net)
net = tf.reshape(net, [-1, 64 * 7 * 7]) #
net = tf.layers.dense(inputs = net, units = class_num, kernel_initializer = tf.contrib.layers.xavier_initializer(), name = 'regression_output')
#......
#after training
saver = tf.train.Saver()
saver.save(sess, 'reshape_final.ckpt')
tf.train.write_graph(sess.graph.as_graph_def(), "", 'graph_final.pb')
Wie konnte ich das is_training
des batchnorm zu False
nachdem ich speichern Sie es machen?
habe ich versucht, die Schlüsselwörter wie tensorflow batchnorm Wende Ausbildung, Zustand tensorflow Änderung, aber aus nicht finden kann, wie es zu tun.
Edit 1:
Dank @Maxim Lösung, es funktioniert, aber wenn ich versuche, um die Grafik zu gefrieren, ein anderes Problem auftreten.
Befehl:
python3 ~/.keras2/lib/python3.5/site-packages/tensorflow/python/tools/freeze_graph.py --input_graph=graph_final.pb --input_checkpoint=reshape_final.ckpt --output_graph=frozen_graph.pb --output_node_names=regression_output/BiasAdd
python3 ~/.keras2/lib/python3.5/site-packages/tensorflow/python/tools/optimize_for_inference.py --input frozen_graph.pb --output opt_graph.pb --frozen_graph True --input_names input --output_names regression_output/BiasAdd
~/Qt/3rdLibs/tensorflow/bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=opt_graph.pb --out_graph=fused_graph.pb --inputs=input --outputs=regression_output/BiasAdd --transforms="fold_constants sort_by_execution_order fold_batch_norms fold_old_batch_norms"
Nachdem ich transform_graph ausführen, Fehlermeldungen
herausspringen"Sie müssen einen Wert für Platzhalter-Tensor-Feed 'Ausbildung' mit D-Typ Bool"
ich die Grafik speichern mit folgenden Codes:
sess.run(loss, feed_dict={features : train_imgs, x : real_delta, training : False})
saver = tf.train.Saver()
saver.save(sess, 'reshape_final.ckpt')
tf.train.write_graph(sess.graph.as_graph_def(), "", 'graph_final.pb')
Bearbeiten 2:
Platzhalter in Variable ändern funktioniert, aber der Graph nach der Transformation kann nicht von opencv dnn geladen werden.
Änderung
training = tf.placeholder(tf.bool, name='training')
zu
training = tf.Variable(False, name='training', trainable=False)
Danke, aber ich kann diese Lösung nicht mit transform_graph verwenden – Tham
@Maxim Ich bearbeite meine Frage, könntest du mir eine Hand geben? Danke – StereoMatching
Hast du 'fold_batch_norms' oder' strip_unused_nodes' versucht? https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/graph_transforms/README.md#fold_batch_norms – Maxim