##やりたいこと
入力値に対する目標値に近い値を出力したい。
csvファイルの中身は以下のようになっています。
##問題
以下のコードで出力値と目標値の誤差を縮めようとしたのですがなかなか縮まりませんでした。
pot1 pot2 pot3 ... pot398 pot399 pot400 angle 0 6.770000e-13 2.310000e-09 3.000000e-06 ... 5.080000e-81 5.150000e-86 7.280000e-92 270 1 9.620000e-13 5.120000e-09 5.540000e-06 ... 6.020000e-82 4.080000e-87 3.880000e-93 0 2 1.060000e-12 5.890000e-09 6.370000e-06 ... 6.020000e-82 4.080000e-87 3.880000e-93 0 3 5.550000e-13 1.020000e-09 1.600000e-06 ... 6.020000e-82 4.080000e-87 3.880000e-93 0 4 5.550000e-13 1.020000e-09 1.600000e-06 ... 6.020000e-82 4.080000e-87 3.880000e-93 0 ... ... ... ... ... ... ... ... 11977 1.430000e-36 8.270000e-31 6.640000e-26 ... 1.360000e-12 5.510000e-17 3.120000e-22 0 11978 4.860000e-37 2.820000e-31 2.270000e-26 ... 2.070000e-12 8.420000e-17 4.760000e-22 0 11979 4.860000e-37 2.820000e-31 2.270000e-26 ... 1.230000e-12 4.120000e-17 1.910000e-22 0 11980 1.630000e-37 9.440000e-32 7.580000e-27 ... 1.230000e-12 4.120000e-17 1.910000e-22 0 11981 1.630000e-37 9.440000e-32 7.580000e-27 ... 7.070000e-13 1.940000e-17 7.380000e-23 180
python
1 2import pandas as pd 3from sklearn.model_selection import train_test_split 4from sklearn.metrics import accuracy_score 5import numpy as np 6import tensorflow as tf 7 8# データの読み込み 9f_data = pd.read_csv("csv/4-5/potential4-5.csv", encoding="utf-8") 10 11# データをラベルと入力データに分離する (使うのは最後) 12y_data = f_data.loc[:,["angle"]] 13x_data = f_data.iloc[:, range(0,400)] 14x_train, x_test, y_train, y_test = train_test_split( 15 x_data, y_data, test_size=0.2, random_state=42) 16 17 18 19x = tf.placeholder(tf.float32, [None, 400]) #入れ物 20y_ = tf.placeholder(tf.float32, [None, 1]) 21 22W = tf.Variable(tf.zeros([400, 1]))#変数 23b = tf.Variable(tf.zeros([1])) 24 25#y = W*x+b 26y = tf.add(b, tf.matmul(x, W))#入れ物と変数で関数を作る 27 28loss = tf.square(y - y_)#(y-y_)^2 29losses = tf.reduce_sum(loss)#Σ(y-y_)^2 30train = tf.train.AdamOptimizer().minimize(losses) 31 32init = tf.initialize_all_variables() 33 34sess = tf.Session() 35sess.run(init) 36 37for epoch in range(400001): 38 #入れ物にデータを入れる 39 sess.run(train, feed_dict={x:x_train, y_:y_train}) 40 if epoch % 100000 == 0: 41 #入れ物にデータを入れる 42 losses_val=sess.run(losses, feed_dict={x:x_train, y_:y_train}) 43 print(epoch, losses_val) 44 45###########
誤差は以下になります。
epoch loss 0 144098800.0 100000 80782540.0 200000 79544110.0 300000 79425140.0 400000 79354920.0
データのangleは0が多いため、最小二乗誤差に合わないようなものだから誤差が大きいのは仕方がないということでしょうか?
ご教授ください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。