質問編集履歴
4
コードを見やすくした
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
|
7
7
|
言語:python2.7
|
8
8
|
|
9
|
+
GPUなし
|
10
|
+
|
9
11
|
|
10
12
|
|
11
13
|
mnist_expert.pyのソースコードは以下の通りです.
|
3
コードを見やすくした
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
環境構築にはhttps://www.tensorflow.org/install/install_linuxを参考にしました.
|
4
4
|
|
5
|
+
os:ubuntu16.04
|
6
|
+
|
7
|
+
言語:python2.7
|
8
|
+
|
5
9
|
|
6
10
|
|
7
11
|
mnist_expert.pyのソースコードは以下の通りです.
|
2
コードを見やすくしました
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,6 +8,24 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
+
```python
|
12
|
+
|
13
|
+
#!/usr/bin/env python
|
14
|
+
|
15
|
+
# -*- coding: utf-8 -*-
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
####################################################################
|
20
|
+
|
21
|
+
# mnistをtensorflowで実装
|
22
|
+
|
23
|
+
# コードの分割化などを行っていないため若干見にくい
|
24
|
+
|
25
|
+
####################################################################
|
26
|
+
|
27
|
+
|
28
|
+
|
11
29
|
from __future__ import absolute_import,unicode_literals
|
12
30
|
|
13
31
|
import input_data
|
@@ -20,7 +38,7 @@
|
|
20
38
|
|
21
39
|
|
22
40
|
|
23
|
-
|
41
|
+
# 開始時刻
|
24
42
|
|
25
43
|
start_time = time.time()
|
26
44
|
|
@@ -28,6 +46,8 @@
|
|
28
46
|
|
29
47
|
|
30
48
|
|
49
|
+
# mnistデータの読み込み
|
50
|
+
|
31
51
|
print "--- MNISTデータの読み込み開始 ---"
|
32
52
|
|
33
53
|
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
|
@@ -36,11 +56,11 @@
|
|
36
56
|
|
37
57
|
|
38
58
|
|
39
|
-
|
59
|
+
# cross_entropyを実装
|
40
60
|
|
41
61
|
sess = tf.InteractiveSession() # 対話型セッションを始める(長時間プログラムには向かない)
|
42
62
|
|
43
|
-
|
63
|
+
# 式に用いる変数設定
|
44
64
|
|
45
65
|
x = tf.placeholder("float", shape=[None,784]) # 入力
|
46
66
|
|
@@ -58,13 +78,15 @@
|
|
58
78
|
|
59
79
|
|
60
80
|
|
61
|
-
|
81
|
+
# 学習アルゴリズムと最小化問題
|
82
|
+
|
83
|
+
# ココでは最急降下法(勾配降下法)の最小化を解く。学習率0.01
|
62
84
|
|
63
85
|
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
|
64
86
|
|
65
87
|
|
66
88
|
|
67
|
-
|
89
|
+
# 1000回学習 バッチサイズ50(この中身の処理は未だ勉強不足)
|
68
90
|
|
69
91
|
for i in range(1000):
|
70
92
|
|
@@ -74,7 +96,7 @@
|
|
74
96
|
|
75
97
|
|
76
98
|
|
77
|
-
|
99
|
+
# 結果の表示
|
78
100
|
|
79
101
|
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))# 尤もらしいClassすなわちargmax(y)が教師ラベルと等しいか
|
80
102
|
|
@@ -82,7 +104,23 @@
|
|
82
104
|
|
83
105
|
print accuracy.eval(feed_dict={x: mnist.test.images,y_: mnist.test.labels})# xに画像y_にそのラベルを代入
|
84
106
|
|
85
|
-
|
107
|
+
# 出てくる結果はこの時点で精度91%前後
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
###############################################################
|
112
|
+
|
113
|
+
# 以下で深層畳み込みニューラルネットワークを構築する。
|
114
|
+
|
115
|
+
# 深層化することで精度99%を目指す。
|
116
|
+
|
117
|
+
###############################################################
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
# 重みとバイアスの初期化
|
122
|
+
|
123
|
+
# 勾配消失問題のために、小さいノイズをのせて重みを初期化する関数?どういうこと?
|
86
124
|
|
87
125
|
def weight_variable(shape): # 重みの初期化
|
88
126
|
|
@@ -102,7 +140,7 @@
|
|
102
140
|
|
103
141
|
|
104
142
|
|
105
|
-
|
143
|
+
# convolutionとpoolingの定義
|
106
144
|
|
107
145
|
def conv2d(x,W):
|
108
146
|
|
@@ -118,7 +156,9 @@
|
|
118
156
|
|
119
157
|
|
120
158
|
|
121
|
-
|
159
|
+
# 第1レイヤー 5x5パッチで32の特徴を計算
|
160
|
+
|
161
|
+
# [5,5,1,32]は、5,5でパッチサイズを、1で入力チャンネル数、32で出力チャンネル
|
122
162
|
|
123
163
|
W_conv1 = weight_variable([5,5,1,32]) # 変数定義
|
124
164
|
|
@@ -138,6 +178,8 @@
|
|
138
178
|
|
139
179
|
|
140
180
|
|
181
|
+
# 第2レイヤー 5x5パッチで64の特徴量を計算
|
182
|
+
|
141
183
|
W_conv2 = weight_variable([5,5,32,64]) # 変数定義
|
142
184
|
|
143
185
|
b_conv2 = bias_variable([64]) # 変数定義
|
@@ -154,6 +196,8 @@
|
|
154
196
|
|
155
197
|
|
156
198
|
|
199
|
+
# 全結合層(フルコネクションレイヤー)への変換
|
200
|
+
|
157
201
|
W_fc1 = weight_variable([7*7*64,1024]) # どういう変換?
|
158
202
|
|
159
203
|
b_fc1 = bias_variable([1024])
|
@@ -168,7 +212,7 @@
|
|
168
212
|
|
169
213
|
|
170
214
|
|
171
|
-
|
215
|
+
# Dropoutを行う
|
172
216
|
|
173
217
|
keep_prob = tf.placeholder("float")
|
174
218
|
|
@@ -180,7 +224,7 @@
|
|
180
224
|
|
181
225
|
|
182
226
|
|
183
|
-
|
227
|
+
# 読み出しレイヤー
|
184
228
|
|
185
229
|
W_fc2 = weight_variable([1024,10])
|
186
230
|
|
@@ -194,6 +238,8 @@
|
|
194
238
|
|
195
239
|
|
196
240
|
|
241
|
+
# モデルの学習と評価
|
242
|
+
|
197
243
|
cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
|
198
244
|
|
199
245
|
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)# Adam法を使用。
|
@@ -220,12 +266,20 @@
|
|
220
266
|
|
221
267
|
|
222
268
|
|
269
|
+
# 結果表示
|
270
|
+
|
223
271
|
print "test accuracy %g" % accuracy.eval(feed_dict={x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0})
|
224
272
|
|
225
273
|
|
226
274
|
|
275
|
+
# 終了時刻
|
276
|
+
|
227
277
|
end_time = time.time()
|
228
278
|
|
229
279
|
print "終了時刻: " + str(end_time)
|
230
280
|
|
231
281
|
print "かかった時間: " + str(end_time - start_time)
|
282
|
+
|
283
|
+
|
284
|
+
|
285
|
+
```
|
1
タグの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
|
23
|
+
|
24
24
|
|
25
25
|
start_time = time.time()
|
26
26
|
|
@@ -28,8 +28,6 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
# mnistデータの読み込み
|
32
|
-
|
33
31
|
print "--- MNISTデータの読み込み開始 ---"
|
34
32
|
|
35
33
|
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
|
@@ -38,11 +36,11 @@
|
|
38
36
|
|
39
37
|
|
40
38
|
|
41
|
-
|
39
|
+
|
42
40
|
|
43
41
|
sess = tf.InteractiveSession() # 対話型セッションを始める(長時間プログラムには向かない)
|
44
42
|
|
45
|
-
|
43
|
+
|
46
44
|
|
47
45
|
x = tf.placeholder("float", shape=[None,784]) # 入力
|
48
46
|
|
@@ -60,15 +58,13 @@
|
|
60
58
|
|
61
59
|
|
62
60
|
|
63
|
-
|
61
|
+
|
64
|
-
|
65
|
-
# ココでは最急降下法(勾配降下法)の最小化を解く。学習率0.01
|
66
62
|
|
67
63
|
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
|
68
64
|
|
69
65
|
|
70
66
|
|
71
|
-
|
67
|
+
|
72
68
|
|
73
69
|
for i in range(1000):
|
74
70
|
|
@@ -78,7 +74,7 @@
|
|
78
74
|
|
79
75
|
|
80
76
|
|
81
|
-
|
77
|
+
|
82
78
|
|
83
79
|
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))# 尤もらしいClassすなわちargmax(y)が教師ラベルと等しいか
|
84
80
|
|
@@ -86,23 +82,7 @@
|
|
86
82
|
|
87
83
|
print accuracy.eval(feed_dict={x: mnist.test.images,y_: mnist.test.labels})# xに画像y_にそのラベルを代入
|
88
84
|
|
89
|
-
|
85
|
+
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
###############################################################
|
94
|
-
|
95
|
-
# 以下で深層畳み込みニューラルネットワークを構築する。
|
96
|
-
|
97
|
-
# 深層化することで精度99%を目指す。
|
98
|
-
|
99
|
-
###############################################################
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
# 重みとバイアスの初期化
|
104
|
-
|
105
|
-
# 勾配消失問題のために、小さいノイズをのせて重みを初期化する関数?どういうこと?
|
106
86
|
|
107
87
|
def weight_variable(shape): # 重みの初期化
|
108
88
|
|
@@ -122,7 +102,7 @@
|
|
122
102
|
|
123
103
|
|
124
104
|
|
125
|
-
|
105
|
+
|
126
106
|
|
127
107
|
def conv2d(x,W):
|
128
108
|
|
@@ -138,9 +118,7 @@
|
|
138
118
|
|
139
119
|
|
140
120
|
|
141
|
-
|
121
|
+
|
142
|
-
|
143
|
-
# [5,5,1,32]は、5,5でパッチサイズを、1で入力チャンネル数、32で出力チャンネル
|
144
122
|
|
145
123
|
W_conv1 = weight_variable([5,5,1,32]) # 変数定義
|
146
124
|
|
@@ -160,8 +138,6 @@
|
|
160
138
|
|
161
139
|
|
162
140
|
|
163
|
-
# 第2レイヤー 5x5パッチで64の特徴量を計算
|
164
|
-
|
165
141
|
W_conv2 = weight_variable([5,5,32,64]) # 変数定義
|
166
142
|
|
167
143
|
b_conv2 = bias_variable([64]) # 変数定義
|
@@ -178,8 +154,6 @@
|
|
178
154
|
|
179
155
|
|
180
156
|
|
181
|
-
# 全結合層(フルコネクションレイヤー)への変換
|
182
|
-
|
183
157
|
W_fc1 = weight_variable([7*7*64,1024]) # どういう変換?
|
184
158
|
|
185
159
|
b_fc1 = bias_variable([1024])
|
@@ -194,7 +168,7 @@
|
|
194
168
|
|
195
169
|
|
196
170
|
|
197
|
-
|
171
|
+
|
198
172
|
|
199
173
|
keep_prob = tf.placeholder("float")
|
200
174
|
|
@@ -206,7 +180,7 @@
|
|
206
180
|
|
207
181
|
|
208
182
|
|
209
|
-
|
183
|
+
|
210
184
|
|
211
185
|
W_fc2 = weight_variable([1024,10])
|
212
186
|
|
@@ -220,8 +194,6 @@
|
|
220
194
|
|
221
195
|
|
222
196
|
|
223
|
-
# モデルの学習と評価
|
224
|
-
|
225
197
|
cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
|
226
198
|
|
227
199
|
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)# Adam法を使用。
|
@@ -248,14 +220,10 @@
|
|
248
220
|
|
249
221
|
|
250
222
|
|
251
|
-
# 結果表示
|
252
|
-
|
253
223
|
print "test accuracy %g" % accuracy.eval(feed_dict={x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0})
|
254
224
|
|
255
225
|
|
256
226
|
|
257
|
-
# 終了時刻
|
258
|
-
|
259
227
|
end_time = time.time()
|
260
228
|
|
261
229
|
print "終了時刻: " + str(end_time)
|