#やりたいこと
・Tensorflowを用いたニューラルネットワークで、読み込んだcsvデータを使用し、数値予測を行いたい。
・トレーニングデータ(x_train,y_train)でモデルを作り、テストデータ(x_test,y_test)で評価したい。
・ニューラルネットワークの隠れ層は活性化関数(シグモイド)一層。
・損失関数は絶対平均誤差(MAE)で行いたい。
#現状の問題
・Accuracyが1.0になってしまう。csvデータはおそらくおかしくない。(kerasで作ったニューラルネットワークで確認済み)
・Session内の定義がおかしいと考えている。
#問題のプログラム
import numpy as np import pandas as pd import tensorflow as tf # Parameters learning_rate = 0.01 training_epochs = 10 batch_size = 100 display_step = 1 train_size = 800 step_size = 1000 # Network Parameters n_hidden_1 = 614 n_input = 614 n_classes=1 data=np.loadtxt("input.csv",delimiter=",",dtype="float")#入力変数 data1=np.loadtxt("output.csv",delimiter=",",dtype="float",skip_header=1)#目的変数 X1=data[0:4000,0:614] Y1=data1[0:4000,0:1] x_train=X1[0:3000,:] y_train=Y1[0:3000,:] x_test=X1[3000:4000,:] y_test=Y1[3000:4000,:] # tf Graph input x = tf.placeholder("float", [None, n_input]) y = tf.placeholder("float", [None, n_classes]) # Create model def multilayer_perceptron(x, weights, biases): # Hidden layer with Sigmoid activation layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) layer_1 = tf.nn.sigmoid(layer_1) # Output layer with linear activation out_layer = tf.matmul(layer_1, weights['out']) + biases['out'] return out_layer # Store layers weight & bias weights = { 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'out': tf.Variable(tf.random_normal([n_hidden_1, n_classes])) } biases = { 'b1': tf.Variable(tf.random_normal([n_hidden_1])), 'out': tf.Variable(tf.random_normal([n_classes])) } # Construct model pred = multilayer_perceptron(x, weights, biases) # Define loss and optimizer cost = tf.reduce_mean(tf.map_fn(tf.abs, y - pred)) #cost = tf.reduce_mean(tf.losses.mean_squared_error(predictions=pred,labels=y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) # Initializing the variables init = tf.initialize_all_variables() # Launch the graph with tf.Session() as sess: sess.run(init) # Training cycle for epoch in range(training_epochs): avg_cost = 0. # Loop over step_size for i in range(step_size): # 訓練データから batch_size で指定した数をランダムに取得 ind = np.random.choice(batch_size, batch_size) x_train_batch = x_train[ind] y_train_batch = y_train[ind] # Run optimization op (backprop) and cost op (to get loss value) _, c = sess.run([optimizer, cost], feed_dict={x: x_train_batch, y: y_train_batch}) # Compute average loss avg_cost += c / step_size # Display logs per epoch step if epoch % display_step == 0: print ("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost)) print ("Optimization Finished!") # Test model correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) # Calculate accuracy accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print ("Accuracy:", accuracy.eval({x: x_test, y: y_test}))
#出力結果
Epoch: 0001 cost= 0.369236527
Epoch: 0002 cost= 0.293005231
Epoch: 0003 cost= 0.240351768
Epoch: 0004 cost= 0.254986027
Epoch: 0005 cost= 0.280752749
Epoch: 0006 cost= 0.282177720
Epoch: 0007 cost= 0.265220450
Epoch: 0008 cost= 0.253898602
Epoch: 0009 cost= 0.276555079
Epoch: 0010 cost= 0.260554105
Optimization Finished!
Accuracy: 1.0
至らない点があるかもしれませんがよろしくお願いいたします。
あなたの回答
tips
プレビュー