私は研究で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))

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.