回答編集履歴
3
修正
test
CHANGED
@@ -16,9 +16,9 @@
|
|
16
16
|
|
17
17
|
1. 学習ではlossが小さくなるように重みを更新します。なので、学習率次第ではaccuracyははじめのうちは変化しません。それに対して、lossが先が変動します。(学習している証拠です。)これを出力すべきです。今回の場合はtensorflowの泥臭いところを全部自分で書きたい(のかもしれない)ので、もとのコードに修正を加えましたが、Kerasなどの高度なライブラリを使うことで、デフォルトでaccuracyとlossの両方を出力させることができます。
|
18
18
|
|
19
|
-
2. cross_entropyの計算が正しくありませんでした。[本家](https://www.tensorflow.org/get_started/mnist/beginners)のチュートリアルを参考にするとよいのですが、reduction_indices=[1]が欠けているせいで、一定の精度以上学習できません。またyの値のクリッピングも学習にバイアスをあたえるので、ない方がよいです。理由はyが1以上であれば、みなlossがおなじになるので重みを更新しようがないことが挙げられます。
|
20
|
-
|
21
|
-
3. lossを出力させていないことにもつながりますが、重みの初期化次第ではlossがnanになることがあります。このような場合も学習することはできません。
|
19
|
+
2. cross_entropyの計算が正しくありませんでした。[本家](https://www.tensorflow.org/get_started/mnist/beginners)のチュートリアルを参考にするとよいのですが、reduction_indices=[1]が欠けているせいで、一定の精度以上学習できません。(追記:[勾配に対してclipをつけろと言われていますね](https://stackoverflow.com/questions/36498127/how-to-effectively-apply-gradient-clipping-in-tensor-flow)。またyの値のクリッピングも学習にバイアスをあたえるので、ない方がよいです。理由はyが1以上であれば、みなlossがおなじになるので重みを更新しようがないことが挙げられます。)
|
20
|
+
|
21
|
+
3. lossを出力させていないことにもつながりますが、重みの初期化次第ではlossがnanになることがあります。このような場合も学習することはできません。(追記:lossがnanになるのはyの値をclipしていないことによるようですね。)
|
22
22
|
|
23
23
|
4. 画像取り込みのpathに関するバグを修正しました。
|
24
24
|
|
2
改善
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
手元のパソコンにとってAlexNetは非常に重いので、いたるところでパラメータが縮小されています。
|
4
4
|
|
5
|
-
少なくとも有名なKaggleの犬猫分類に対して判定精度99
|
5
|
+
少なくとも有名なKaggleの犬猫分類に対して判定精度99%(追記:教師データに対して100%に過学習できるほど学習できる……このパラメータではテストデータに対しては70%程度ですね。)を超えることができます。
|
6
6
|
|
7
7
|
犬猫分類のパラメータなので、2値分類です。
|
8
8
|
|
1
修正の反映
test
CHANGED
@@ -24,7 +24,9 @@
|
|
24
24
|
|
25
25
|
5. 以前の回答でも指摘した、conv2d_firstのカッコの閉じる場所を修正しました。
|
26
26
|
|
27
|
-
6. 以前の回答の最後のコードのインデントが正しくな
|
27
|
+
6. 以前の回答の最後のコードのインデントが正しくなかった箇所を修正しました。
|
28
|
+
|
29
|
+
|
28
30
|
|
29
31
|
```python
|
30
32
|
|
@@ -70,9 +72,7 @@
|
|
70
72
|
|
71
73
|
def inference(images_placeholder, keep_prob):
|
72
74
|
|
73
|
-
def weight_variable(shape,num):
|
75
|
+
def weight_variable(shape, num):
|
74
|
-
|
75
|
-
#initial = tf.truncated_normal(shape, stddev=0.1/math.sqrt(float(num)))
|
76
76
|
|
77
77
|
initial = tf.truncated_normal(shape, stddev=0.1, mean=0.)
|
78
78
|
|
@@ -100,22 +100,12 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
-
'''
|
104
|
-
|
105
|
-
def max_pool_
|
103
|
+
def max_pool_2x2(x):
|
106
|
-
|
104
|
+
|
107
|
-
return tf.nn.max_pool(x, ksize=[1,
|
105
|
+
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
|
108
106
|
|
109
107
|
strides=[1, 2, 2, 1], padding='SAME')
|
110
108
|
|
111
|
-
'''
|
112
|
-
|
113
|
-
def max_pool_2x2(x):
|
114
|
-
|
115
|
-
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
|
116
|
-
|
117
|
-
strides=[1, 2, 2, 1], padding='SAME')
|
118
|
-
|
119
109
|
|
120
110
|
|
121
111
|
x_image = tf.reshape(images_placeholder, [-1, IMAGE_SIZE, IMAGE_SIZE, 3])
|
@@ -240,10 +230,6 @@
|
|
240
230
|
|
241
231
|
def loss(logits, labels):
|
242
232
|
|
243
|
-
#cross_entropy = tf.reduce_mean(-tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0))))
|
244
|
-
|
245
|
-
#cross_entropy = tf.reduce_mean(-tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0)), reduction_indices=[1]))
|
246
|
-
|
247
233
|
cross_entropy = tf.reduce_mean(-tf.reduce_sum(labels*tf.log(logits), reduction_indices=[1]))
|
248
234
|
|
249
235
|
|
@@ -464,18 +450,4 @@
|
|
464
450
|
|
465
451
|
saver.restore(sess,"model.ckpt")
|
466
452
|
|
467
|
-
|
468
|
-
|
469
|
-
'''
|
470
|
-
|
471
|
-
for i in range(len(test_image)):
|
472
|
-
|
473
|
-
hoge = np.argmax(logits.eval(feed_dict={images_placeholder: [test_image[i]],keep_prob: 1.0 })[0])
|
474
|
-
|
475
|
-
print("%s"%hoge)
|
476
|
-
|
477
|
-
exit()
|
478
|
-
|
479
|
-
'''
|
480
|
-
|
481
453
|
```
|