# coding: UTF-8 #0.ライブラリをロード import numpy as np # import matplotlib.pyplot as plt import tensorflow as tf #1.予測式(モデル)を記述 # 入力変数と出力変数のプレースホルダを生成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(-10 * tf.ones((2, 1)), name="a") b = tf.Variable(200., name="b") # モデル式 u = tf.matmul(x, a) + b y = tf.sigmoid(u) #2.誤差関数と最適化手法を記述 # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_)) # 最適化手法を選ぶ(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #3.訓練データを作成し、 train_x = np.array([[2., 3.], [0., 16.], [3., 1.], [2., 8.]]) train_y = np.array([1., 1., 0., 0.]).reshape(4, 1) print "x=", train_x print "y=", train_y #学習実行 # (2)セッションを準備し、変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (3)最急勾配法でパラメータ更新(100回更新する) for i in range(1000): _, l, a_, b_ = sess.run([train_step, loss, a, b], feed_dict={x: train_x, y_: train_y}) if (i + 1) % 100 == 0: print "step=%3d, a1=%6.2f, a2=%6.2f, b=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], b_, l) # (4) 学習結果を出力 est_a, est_b = sess.run([a, b], feed_dict={x: train_x, y_: train_y}) print "Estimated: a1=%6.2f, a2=%6.2f, b=%6.2f" % (est_a[0], est_a[1], est_b) #4.予測 # (1)新しいデータを容易 new_x = np.array([1., 11.]).reshape(1, 2) # (2) 学習結果をつかって、予測実施 new_y = sess.run(y, feed_dict={x: new_x}) print new_y #5.後片付け # セッションを閉じる sess.close()