TensorFlowを使用して簡単なニューラルネットワークを構築しようとしています。目標は、32ピクセル×32ピクセルのイメージで四角形の中心を見つけることです。矩形は5つのベクトルで記述されます。最初のベクトルは位置ベクトルであり、他の4つは方向ベクトルであり、長方形のエッジを構成します。 1つのベクトルには2つの値(xとy)があります。 ( - 6,0)TensorFlowを使用した簡単なフィードフォワードニューラルネットワークは学習しません。
このイメージの対応する入力は、(2,5)(0,4)(6,0)(0、-4)であろう。 センター(したがって、希望の出力)は(5,7)にあります。
私は次のようなルックスを思い付いコード:
import tensorflow as tf import numpy as np import Rectangle_Records def init_weights(shape): """ Weight initialization """ weights = tf.random_normal(shape, stddev=0.1) return tf.Variable(weights) def forwardprop(x, w_1, w_2): """ Forward-propagation """ h = tf.nn.sigmoid(tf.matmul(x, w_1)) y_predict = tf.matmul(h, w_2) return y_predict def main(): x_size = 10 y_size = 2 h_1_size = 256 # Prepare input data input_data = Rectangle_Records.DataSet() x = tf.placeholder(tf.float32, shape = [None, x_size]) y_label = tf.placeholder(tf.float32, shape = [None, y_size]) # Weight initializations w_1 = init_weights((x_size, h_1_size)) w_2 = init_weights((h_1_size, y_size)) # Forward propagation y_predict = forwardprop(x, w_1, w_2) # Backward propagation cost = tf.reduce_mean(tf.square(y_predict - y_label)) updates = tf.train.GradientDescentOptimizer(0.01).minimize(cost) # Run sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) for i in range(200): batch = input_data.next_batch(10) sess.run(updates, feed_dict = {x: batch[0], y_label: batch[1]}) sess.close() if __name__ == "__main__": main()
悲しいことに、ネットワークが適切に学習しません。結果は遠すぎます。例えば、[[3.7.76]、[3.70766664]]がarround [[3.、7.]]でなければなりません。私は間違って何をしていますか?
あなたはR^2やMSEを追跡しプロットしていますか? –
いいえ、私はどのように知りません。私はこれをTensorFlowでやや難しいと思っています。 – Gizmo
その目的のために予約したテストデータセットに対して手動で行うことができます。 3.71が3.7に近いようだから尋ねます。 –