実現したいこと
多次元関数の予測を最小二乗法を用いて行いたいと考えています。
以下のコードのようにデータは入力400に対して出力1です
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(50000): 38 #入れ物にデータを入れる 39 sess.run(train, feed_dict={x:x_train, y_:y_train}) 40 if epoch % 10000 == 0: 41 #入れ物にデータを入れる 42 losses_val=sess.run(losses, feed_dict={x:x_train, y_:y_train}) 43 print(epoch, losses_val) 44 45 46""" 47 pot1 pot2 pot3 pot4 ... pot397 pot398 pot399 pot400 480 6.770000e-13 2.310000e-09 3.000000e-06 5.808920e-04 ... 2.810000e-75 5.080000e-81 5.150000e-86 7.280000e-92 491 9.620000e-13 5.120000e-09 5.540000e-06 8.867230e-04 ... 4.560000e-76 6.020000e-82 4.080000e-87 3.880000e-93 502 1.060000e-12 5.890000e-09 6.370000e-06 1.019262e-03 ... 4.560000e-76 6.020000e-82 4.080000e-87 3.880000e-93 513 5.550000e-13 1.020000e-09 1.600000e-06 3.735150e-04 ... 4.560000e-76 6.020000e-82 4.080000e-87 3.880000e-93 524 5.550000e-13 1.020000e-09 1.600000e-06 3.735150e-04 ... 4.560000e-76 6.020000e-82 4.080000e-87 3.880000e-93 53.. ... ... ... ... ... ... ... ... ... 54594 1.430000e-36 8.270000e-31 6.640000e-26 7.450000e-22 ... 4.720000e-09 1.360000e-12 5.510000e-17 3.120000e-22 55595 4.860000e-37 2.820000e-31 2.270000e-26 2.540000e-22 ... 7.200000e-09 2.070000e-12 8.420000e-17 4.760000e-22 56596 4.860000e-37 2.820000e-31 2.270000e-26 2.540000e-22 ... 5.210000e-09 1.230000e-12 4.120000e-17 1.910000e-22 57597 1.630000e-37 9.440000e-32 7.580000e-27 8.510000e-23 ... 5.210000e-09 1.230000e-12 4.120000e-17 1.910000e-22 58598 1.630000e-37 9.440000e-32 7.580000e-27 8.510000e-23 ... 3.630000e-09 7.070000e-13 1.940000e-17 7.380000e-23 59""" 60
##問題
学びなおしてプログラムを組みました。
クロスエントロピーはクラス分類で使うものだったらしく間違っていたみたいです。
最小二乗法で傾きを出し、その傾きが0になるときのWを求めたいのですがこれでいいのでしょうか?
数学的に言えば誤差の2乗の和をWで偏微分したときに0になるときのWが求めたいものなのですが
tf.train.AdamOptimizer().minimize(losses)などをせずに地道に計算したほうがいいでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/31 20:01 編集
2019/10/31 20:33