質問編集履歴

8

a

2019/10/31 19:24

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -130,21 +130,7 @@
130
130
 
131
131
  ```
132
132
 
133
- ###問題
133
+ ##問題
134
-
135
- このコードで正解率を出してみたところ0になってしまいました。
136
-
137
- 考えられる原因は2つあり、
138
-
139
- 1つ目はtf.equal(tf.abs(y), tf.abs(y_))という考え方が間違っており、別のもの同士を比較している。
140
-
141
- 2つ目は、角度を出力にしており、現在0~360のどれか1つを出力するので出力1としているが、0と1のリスト(例えば0ならば[1,0,0,・・・,0])に書き換えてtf.equal(tf.argmax(y,1), tf.argmax(y_,1))をするべき。
142
-
143
- のどちらかまたは両方だと考えてます。
144
-
145
-
146
-
147
- ##問題の追記
148
134
 
149
135
  学びなおしてプログラムを組みました。
150
136
 

7

sだs

2019/10/31 19:24

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
 
146
146
 
147
- ##追記
147
+ ##問題の追記
148
148
 
149
149
  学びなおしてプログラムを組みました。
150
150
 

6

a

2019/10/31 17:20

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
 
146
146
 
147
- 追記
147
+ ##追記
148
148
 
149
149
  学びなおしてプログラムを組みました。
150
150
 

5

ありがとうございました。

2019/10/31 17:11

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -22,13 +22,13 @@
22
22
 
23
23
 
24
24
 
25
- # データの読み込み --- (*1)
25
+ # データの読み込み
26
26
 
27
- f_data = pd.read_csv("csv/4-5/pot4-5_0.csv", encoding="utf-8")
27
+ f_data = pd.read_csv("csv/4-5/potential4-5.csv", encoding="utf-8")
28
28
 
29
29
 
30
30
 
31
- # データをラベルと入力データに分離する --- (*2)
31
+ # データをラベルと入力データに分離する (使うのは最後)
32
32
 
33
33
  y_data = f_data.loc[:,["angle"]]
34
34
 
@@ -44,29 +44,35 @@
44
44
 
45
45
 
46
46
 
47
- x = tf.placeholder(tf.float32, [None, 400])
47
+ x = tf.placeholder(tf.float32, [None, 400]) #入れ物
48
48
 
49
49
  y_ = tf.placeholder(tf.float32, [None, 1])
50
50
 
51
51
 
52
52
 
53
- W = tf.Variable(tf.zeros([400, 1]))
53
+ W = tf.Variable(tf.zeros([400, 1]))#変数
54
54
 
55
55
  b = tf.Variable(tf.zeros([1]))
56
56
 
57
57
 
58
58
 
59
+ #y = W*x+b
60
+
59
- y = tf.nn.softmax(tf.matmul(x, W) + b)
61
+ y = tf.add(b, tf.matmul(x, W))#入れ物と変数で関数を作る
60
62
 
61
63
 
62
64
 
63
- cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
65
+ loss = tf.square(y - y_)#(y-y_)^2
64
66
 
67
+ losses = tf.reduce_sum(loss)#Σ(y-y_)^2
68
+
65
- train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
69
+ train = tf.train.AdamOptimizer().minimize(losses)
66
70
 
67
71
 
68
72
 
69
73
  init = tf.initialize_all_variables()
74
+
75
+
70
76
 
71
77
  sess = tf.Session()
72
78
 
@@ -74,25 +80,19 @@
74
80
 
75
81
 
76
82
 
83
+ for epoch in range(50000):
77
84
 
85
+ #入れ物にデータを入れる
78
86
 
79
- for i in range(100):
87
+ sess.run(train, feed_dict={x:x_train, y_:y_train})
80
88
 
81
- sess.run(train_step, feed_dict={x: x_train, y_: y_train})
89
+ if epoch % 10000 == 0:
82
90
 
91
+ #入れ物にデータを入れる
83
92
 
93
+ losses_val=sess.run(losses, feed_dict={x:x_train, y_:y_train})
84
94
 
85
- correct_prediction = tf.equal(tf.abs(y), tf.abs(y_))
86
-
87
- accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
88
-
89
- ass=sess.run(accuracy, feed_dict={x: x_test,y_:y_test})
90
-
91
- print(ass)
95
+ print(epoch, losses_val)
92
-
93
-
94
-
95
- ###########
96
96
 
97
97
 
98
98
 
@@ -146,4 +146,14 @@
146
146
 
147
147
  追記
148
148
 
149
+ 学びなおしてプログラムを組みました。
150
+
151
+ クロスエントロピーはクラス分類で使うものだったらしく間違っていたみたいです。
152
+
153
+ 最小二乗法で傾きを出し、その傾きが0になるときのWを求めたいのですがこれでいいのでしょうか?
154
+
155
+
156
+
157
+ 数学的に言えば誤差の2乗の和をWで偏微分したときに0になるときのWが求めたいものなのですが
158
+
149
- 2つ目が間違っていた場合y_を書き換えるべきかそもそもy = tf.nn.softmax(tf.matmul(x, W) + b)などの式の定義間違ってるのかという原因もあるもしれないです
159
+ tf.train.AdamOptimizer().minimize(losses)などをせずに地道に計算したほうがいいでしょうか

4

2019/10/31 17:11

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
 
47
- x = tf.placeholder(tf.float32, [None, 400]) #任意の数(None)の400次元のデータ (None, 400)
47
+ x = tf.placeholder(tf.float32, [None, 400])
48
48
 
49
- y_ = tf.layers.dense(x,units=1)
49
+ y_ = tf.placeholder(tf.float32, [None, 1])
50
50
 
51
51
 
52
52
 

3

2019/10/31 13:30

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -132,26 +132,18 @@
132
132
 
133
133
  ###問題
134
134
 
135
- 調べても「y=ax + b」予測ばかり多次元の予測をしているものがありせんでした。
135
+ コード正解率してみたところ0になってしまいました。
136
136
 
137
+ 考えられる原因は2つあり、
138
+
139
+ 1つ目はtf.equal(tf.abs(y), tf.abs(y_))という考え方が間違っており、別のもの同士を比較している。
140
+
141
+ 2つ目は、角度を出力にしており、現在0~360のどれか1つを出力するので出力1としているが、0と1のリスト(例えば0ならば[1,0,0,・・・,0])に書き換えてtf.equal(tf.argmax(y,1), tf.argmax(y_,1))をするべき。
142
+
137
- り面倒からなのでしょうか?
143
+ のどちらかまた両方と考えてます。
138
144
 
139
145
 
140
146
 
141
- 知識がないためとんちんかんなことを言うかもしれませんが
147
+ 追記
142
148
 
143
- =a1*x1+a2*x2+a3*x3+・・・a398*x398+a399*x399+a400*x400
149
+ 2つ目が間違っていた場合y_を書き換えるべきかそもそもy = tf.nn.softmax(tf.matmul(x, W) + b)などの式の定義が間違っているのかという原因もあるかもしれないです
144
-
145
- と地道に書いていくしかないのでしょうか?
146
-
147
-
148
-
149
- numpy形式にできるので上記のコードでいうと
150
-
151
- t=w(転置)*[x_data]
152
-
153
- みたいなことが可能であるならば、行っているサンプルやサイトなどをいただけたら幸いです。
154
-
155
-
156
-
157
- よろしくお願いします。

2

a

2019/10/30 15:16

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,8 @@
18
18
 
19
19
  import numpy as np
20
20
 
21
+ import tensorflow as tf
22
+
21
23
 
22
24
 
23
25
  # データの読み込み --- (*1)
@@ -28,17 +30,71 @@
28
30
 
29
31
  # データをラベルと入力データに分離する --- (*2)
30
32
 
31
- y = f_data.loc[:,["angle"]]
33
+ y_data = f_data.loc[:,["angle"]]
32
34
 
33
- x = f_data.iloc[:, range(0,400)]
35
+ x_data = f_data.iloc[:, range(0,400)]
36
+
37
+ x_train, x_test, y_train, y_test = train_test_split(
38
+
39
+ x_data, y_data, test_size=0.2, random_state=42)
34
40
 
35
41
 
36
42
 
37
- y_data=np.array(y)
38
43
 
39
- x_data=np.array(x)
40
44
 
45
+
46
+
47
+ x = tf.placeholder(tf.float32, [None, 400]) #任意の数(None)の400次元のデータ (None, 400)
48
+
49
+ y_ = tf.layers.dense(x,units=1)
50
+
51
+
52
+
53
+ W = tf.Variable(tf.zeros([400, 1]))
54
+
55
+ b = tf.Variable(tf.zeros([1]))
56
+
57
+
58
+
59
+ y = tf.nn.softmax(tf.matmul(x, W) + b)
60
+
61
+
62
+
63
+ cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
64
+
65
+ train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
66
+
67
+
68
+
69
+ init = tf.initialize_all_variables()
70
+
71
+ sess = tf.Session()
72
+
73
+ sess.run(init)
74
+
75
+
76
+
77
+
78
+
79
+ for i in range(100):
80
+
81
+ sess.run(train_step, feed_dict={x: x_train, y_: y_train})
82
+
83
+
84
+
85
+ correct_prediction = tf.equal(tf.abs(y), tf.abs(y_))
86
+
87
+ accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
88
+
89
+ ass=sess.run(accuracy, feed_dict={x: x_test,y_:y_test})
90
+
41
- print(x)
91
+ print(ass)
92
+
93
+
94
+
95
+ ###########
96
+
97
+
42
98
 
43
99
 
44
100
 
@@ -99,9 +155,3 @@
99
155
 
100
156
 
101
157
  よろしくお願いします。
102
-
103
-
104
-
105
- 追記
106
-
107
- tensorflowを使おうか検討しているためタイトルとタグに使いました

1

2019/10/30 15:01

投稿

uedayuya
uedayuya

スコア17

test CHANGED
File without changes
test CHANGED
@@ -99,3 +99,9 @@
99
99
 
100
100
 
101
101
  よろしくお願いします。
102
+
103
+
104
+
105
+ 追記
106
+
107
+ tensorflowを使おうか検討しているためタイトルとタグに使いました