私は研究でNNの勉強をしています.
フレームワークでtensorflowを用いていますが,ログへの書き込みのところで上手くいきません.おそらく
if i % 100 == 0:
loss_val, acc_val = sess.run([loss, accuracy], feed_dict={x:mnist.test.images, t:mnist.test.labels, keep_prob:1.0})
print ('Step: %d, Loss: %f, Accuracy: %f' % (i, loss_val, acc_val))
a = acc_val
#ログを取る処理を実行する(出力はログ情報が書かれた)
summary_str = sess.run(summary_op, feed_dict={x:mnist.test.images, t:mnist.test.labels, keep_prob:1.0})
#ログ情報のプロトコルバッファを書き込む
summary_writer.add_summary(summary_str, i)
fp.write("{0}\n" .format(a))
で間違えているのですが,私の知識不足で解決できません.是非,お答え願います.
以下に,全コードを記しています.
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
import time
start_time = time.time()
print("開始時刻: " + str(start_time))
H = 100
BATCH_SIZE = 100
DROP_OUT_RATE = 0.5
訓練データ
x = tf.placeholder(tf.float32, [None, 784])
入力画像をログに出力
img = tf.reshape(x,[-1,28,28,1])
tf.summary.image("input_data", img, 10)
教師データ
t = tf.placeholder(tf.float32, [None, 10])
入力層から中間層①
with tf.name_scope("hidden1"):
w1 = tf.Variable(tf.random_normal([784, H], mean=0.0, stddev=0.05))
b1 = tf.Variable(tf.zeros([H]))
a1 = tf.sigmoid(tf.matmul(x, w1) + b1)
#中間層①の重みの分布をログ出力
tf.summary.histogram('w1',w1)
中間層①から中間層②
with tf.name_scope("hidden2"):
w2 = tf.Variable(tf.random_normal([H, H], mean=0.0, stddev=0.05))
b2 = tf.Variable(tf.zeros([H]))
a2 = tf.sigmoid(tf.matmul(a1, w2) + b2)
#中間層②の重みの分布をログ出力
tf.summary.histogram('w2',w2)
中間層②から出力層
with tf.name_scope("output"):
w3 = tf.Variable(tf.random_normal([H, 10], mean=0.0, stddev=0.05))
b3 = tf.Variable(tf.zeros([10]))
#ドロップアウト
keep_prob = tf.placeholder(tf.float32)
drop = tf.nn.dropout(a2, keep_prob)
y = tf.nn.relu(tf.matmul(drop, w3) + b3)
誤差
loss = tf.nn.l2_loss(y - t) / BATCH_SIZE
誤差をログ出力
tf.summary.scalar("loss", loss)
訓練
with tf.name_scope("train"):
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
評価
with tf.name_scope("accuracy"):
correct = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1))
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
精度をログ出力
tf.summary.scalar("accuracy", accuracy)
一部のログをマージ
merge = tf.summary.merge([a,b1,c])
全てのログをマージ
summary_op = tf.summary.merge_all()
summary_op = tf.merge_all_summaries()
fp = open("MLP.txt","w")
with tf.Session() as sess:
summary_writer = tf.summary.FileWriter('abc', sess.graph)
mnist = input_data.read_data_sets('.\mnist', one_hot=True, dtype=tf.uint8)
sess.run(tf.global_variables_initializer())
i = 0
for _ in range(1000):
i += 1
bx, bt = mnist.train.next_batch(BATCH_SIZE)
sess.run([train_step], feed_dict={x:bx, t:bt, keep_prob:(1-DROP_OUT_RATE)})
if i % 100 == 0:
loss_val, acc_val = sess.run([loss, accuracy], feed_dict={x:mnist.test.images, t:mnist.test.labels, keep_prob:1.0})
print ('Step: %d, Loss: %f, Accuracy: %f' % (i, loss_val, acc_val))
a = acc_val
#ログを取る処理を実行する(出力はログ情報が書かれた)
summary_str = sess.run(summary_op, feed_dict={x:mnist.test.images, t:mnist.test.labels, keep_prob:1.0})
#ログ情報のプロトコルバッファを書き込む
summary_writer.add_summary(summary_str, i)
fp.write("{0}\n" .format(a))
tensorboard --logdir='abc'
http://localhost:6006
fp.close()
end_time = time.time()
print("終了時刻: ",end_time)
print ("かかった時間: ", (end_time - start_time))