質問編集履歴
8
a
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
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
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
ありがとうございました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,13 +22,13 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
# データの読み込み
|
25
|
+
# データの読み込み
|
26
26
|
|
27
|
-
f_data = pd.read_csv("csv/4-5/pot4-5
|
27
|
+
f_data = pd.read_csv("csv/4-5/potential4-5.csv", encoding="utf-8")
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
# データをラベルと入力データに分離する
|
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.
|
61
|
+
y = tf.add(b, tf.matmul(x, W))#入れ物と変数で関数を作る
|
60
62
|
|
61
63
|
|
62
64
|
|
63
|
-
|
65
|
+
loss = tf.square(y - y_)#(y-y_)^2
|
64
66
|
|
67
|
+
losses = tf.reduce_sum(loss)#Σ(y-y_)^2
|
68
|
+
|
65
|
-
train
|
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
|
-
|
87
|
+
sess.run(train, feed_dict={x:x_train, y_:y_train})
|
80
88
|
|
81
|
-
|
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(
|
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
|
-
|
159
|
+
tf.train.AdamOptimizer().minimize(losses)などをせずに地道に計算したほうがいいでしょうか?
|
4
あ
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])
|
47
|
+
x = tf.placeholder(tf.float32, [None, 400])
|
48
48
|
|
49
|
-
y_ = tf.la
|
49
|
+
y_ = tf.placeholder(tf.float32, [None, 1])
|
50
50
|
|
51
51
|
|
52
52
|
|
3
あ
test
CHANGED
File without changes
|
test
CHANGED
@@ -132,26 +132,18 @@
|
|
132
132
|
|
133
133
|
###問題
|
134
134
|
|
135
|
-
|
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
|
-
|
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
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(
|
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
あ
test
CHANGED
File without changes
|
test
CHANGED
@@ -99,3 +99,9 @@
|
|
99
99
|
|
100
100
|
|
101
101
|
よろしくお願いします。
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
追記
|
106
|
+
|
107
|
+
tensorflowを使おうか検討しているためタイトルとタグに使いました
|