In [1]:
import tensorflow as tf
import numpy as np
from show import show_graph
from tensorflow.examples.tutorials.mnist import input_data
/usr/local/lib/python3.5/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
In [2]:
# 显存管理
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0'    # 指定第一块GPU可用
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.5    # 最多允许占用50%显存
config.gpu_options.allow_growth = True      # 按需申请显存

相关参数设定

In [3]:
n_inputs  = 28*28
n_hidden1 = 300
n_hidden2 = 100
n_outputs = 10

指定模型输入

In [4]:
X = tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")
y = tf.placeholder(tf.int64, shape=(None), name="y")

手动实现一个全连接层的生成函数

In [5]:
def neuron_layer(X, n_neurons, name, activation=None):
    with tf.name_scope(name):
        # 从X中获取输入的大小(对第一层来说是图片的特征数量,对第二层来说是上一层的输出数量)
        n_inputs = int(X.get_shape()[1])
        # 创建W变量,初始化为2/sqrt(n_inputs)标准差的高斯分布随机数
        stddev = 2 / np.sqrt(n_inputs)
        init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)
        W = tf.Variable(init, name="weights")
        # 创建b变量,初始化为0
        b = tf.Variable(tf.zeros([n_neurons]), name="biases")
        # 操作z=XW+b
        z = tf.matmul(X, W) + b
        # 如果需要激活则再通过一个relu,否则直接返回
        if activation=='relu':
            return tf.nn.relu(z)
        else:
            return z
In [6]:
with tf.name_scope('dnn'):
    hidden1 = neuron_layer(X, n_hidden1, 'hidden1', activation='relu')
    hidden2 = neuron_layer(hidden1, n_hidden2, 'hidden2', activation='relu')
    logits = neuron_layer(hidden2, n_outputs, 'outputs')

也可以使用内置的全连接层
fully_connected() 默认使用relu激活

from tensorflow.contrib.layers import fully_connected
with tf.name_scope('dnn'):
    hidden1 = fully_connected(X, n_hidden1, scope='hidden1')
    hidden2 = fully_connected(hidden1, n_hidden2, scope='hidden2')
    logits = fully_connected(hidden2, n_outputs, scope='outputs', activation_fn=None)

计算损失函数

tf.nn.sparse_softmax_cross_entropy_with_logits()稀疏编码的输出(用 0~(n-1) 的id进行编码)经过softmax激活之后,计算交叉熵;相比于单独的softmax、交叉熵操作,该函数计算效率更高,而且也考虑到了一些logits为0等边缘情况;

类似的还有 tf.nn.softmax_cross_entropy_with_logits() ,它的区别在于接收的是独热码形式的输出

In [7]:
with tf.name_scope('loss'):
    # 计算交叉熵
    xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
                       labels=y, logits=logits)
    # 取交叉熵的平均值作为损失函数
    loss = tf.reduce_mean(xentropy, name='loss')

训练

梯度下降优化器、目标是最小化损失函数

In [8]:
learning_rate = 0.01
In [9]:
with tf.name_scope("train"):
    optimizer = tf.train.GradientDescentOptimizer(learning_rate)
    training_op = optimizer.minimize(loss)

评估

计算训练集上的准确率
tf.nn.in_top_k(predictions, targets, k, name=None) 函数用于判断每一组评估数据中,target是否出现在对应prediction的概率最高的前k项当中,如果是,则返回列表中对应项为True,否则为False

In [10]:
with tf.name_scope("eval"):
    # 判断最高概率的预测结果是否与标记相符
    correct = tf.nn.in_top_k(logits, y, 1)
    # tf.case把boolean转为float32(True为1.0,False为0.0)
    # 求平均数得到评估结果也即准确率
    accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))

其他

创建初始化器和保存器

In [11]:
init = tf.global_variables_initializer()
saver = tf.train.Saver()

加载数据

In [12]:
mnist = input_data.read_data_sets("./datasets/mnist/")
Extracting ./datasets/mnist/train-images-idx3-ubyte.gz
Extracting ./datasets/mnist/train-labels-idx1-ubyte.gz
Extracting ./datasets/mnist/t10k-images-idx3-ubyte.gz
Extracting ./datasets/mnist/t10k-labels-idx1-ubyte.gz

开始训练

In [13]:
n_epochs = 400
batch_size = 50
In [14]:
with tf.Session(config=config) as sess:
    # 初始化变量
    init.run()
    # 循环n_epochs趟
    for epoch in range(n_epochs):
        # 每次把训练数据划分为batch_size个batch进行训练
        for iteration in range(mnist.train.num_examples // batch_size):
            X_batch, y_batch = mnist.train.next_batch(batch_size)
            sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
        # 评估准确率并打印
        acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})
        acc_test = accuracy.eval(feed_dict={X: mnist.test.images,
                                            y: mnist.test.labels})        
        print(epoch, "Train accuracy: ", acc_train, "Test accuracy: ", acc_test)
    # 保存模型
    save_path = saver.save(sess, "./10.2.chpt")
0 Train accuracy:  0.96 Test accuracy:  0.9114
1 Train accuracy:  0.96 Test accuracy:  0.9302
2 Train accuracy:  0.94 Test accuracy:  0.9366
3 Train accuracy:  0.96 Test accuracy:  0.9432
4 Train accuracy:  0.96 Test accuracy:  0.9487
5 Train accuracy:  0.98 Test accuracy:  0.9509
6 Train accuracy:  1.0 Test accuracy:  0.9553
7 Train accuracy:  1.0 Test accuracy:  0.9581
8 Train accuracy:  0.96 Test accuracy:  0.9597
9 Train accuracy:  0.96 Test accuracy:  0.9614
10 Train accuracy:  0.98 Test accuracy:  0.9647
11 Train accuracy:  1.0 Test accuracy:  0.9641
12 Train accuracy:  1.0 Test accuracy:  0.9655
13 Train accuracy:  0.96 Test accuracy:  0.9665
14 Train accuracy:  0.98 Test accuracy:  0.9675
15 Train accuracy:  1.0 Test accuracy:  0.9695
16 Train accuracy:  1.0 Test accuracy:  0.9695
17 Train accuracy:  1.0 Test accuracy:  0.9692
18 Train accuracy:  1.0 Test accuracy:  0.9712
19 Train accuracy:  1.0 Test accuracy:  0.9709
20 Train accuracy:  1.0 Test accuracy:  0.9707
21 Train accuracy:  0.96 Test accuracy:  0.9716
22 Train accuracy:  1.0 Test accuracy:  0.9718
23 Train accuracy:  1.0 Test accuracy:  0.9712
24 Train accuracy:  0.98 Test accuracy:  0.9721
25 Train accuracy:  1.0 Test accuracy:  0.9719
26 Train accuracy:  0.98 Test accuracy:  0.9727
27 Train accuracy:  1.0 Test accuracy:  0.9734
28 Train accuracy:  1.0 Test accuracy:  0.9742
29 Train accuracy:  0.98 Test accuracy:  0.9745
30 Train accuracy:  0.98 Test accuracy:  0.974
31 Train accuracy:  1.0 Test accuracy:  0.9732
32 Train accuracy:  1.0 Test accuracy:  0.9742
33 Train accuracy:  1.0 Test accuracy:  0.9748
34 Train accuracy:  1.0 Test accuracy:  0.9752
35 Train accuracy:  1.0 Test accuracy:  0.9752
36 Train accuracy:  1.0 Test accuracy:  0.9757
37 Train accuracy:  0.98 Test accuracy:  0.9757
38 Train accuracy:  1.0 Test accuracy:  0.9758
39 Train accuracy:  1.0 Test accuracy:  0.9754
40 Train accuracy:  1.0 Test accuracy:  0.9765
41 Train accuracy:  1.0 Test accuracy:  0.9763
42 Train accuracy:  1.0 Test accuracy:  0.9759
43 Train accuracy:  1.0 Test accuracy:  0.9771
44 Train accuracy:  1.0 Test accuracy:  0.9756
45 Train accuracy:  1.0 Test accuracy:  0.9762
46 Train accuracy:  1.0 Test accuracy:  0.9763
47 Train accuracy:  1.0 Test accuracy:  0.9765
48 Train accuracy:  1.0 Test accuracy:  0.9768
49 Train accuracy:  1.0 Test accuracy:  0.9773
50 Train accuracy:  1.0 Test accuracy:  0.9776
51 Train accuracy:  1.0 Test accuracy:  0.9773
52 Train accuracy:  1.0 Test accuracy:  0.9762
53 Train accuracy:  1.0 Test accuracy:  0.9766
54 Train accuracy:  1.0 Test accuracy:  0.9767
55 Train accuracy:  1.0 Test accuracy:  0.9774
56 Train accuracy:  1.0 Test accuracy:  0.9771
57 Train accuracy:  1.0 Test accuracy:  0.9773
58 Train accuracy:  1.0 Test accuracy:  0.9765
59 Train accuracy:  1.0 Test accuracy:  0.9776
60 Train accuracy:  1.0 Test accuracy:  0.9767
61 Train accuracy:  1.0 Test accuracy:  0.978
62 Train accuracy:  1.0 Test accuracy:  0.9777
63 Train accuracy:  1.0 Test accuracy:  0.9779
64 Train accuracy:  1.0 Test accuracy:  0.9769
65 Train accuracy:  1.0 Test accuracy:  0.9771
66 Train accuracy:  1.0 Test accuracy:  0.9776
67 Train accuracy:  1.0 Test accuracy:  0.9777
68 Train accuracy:  1.0 Test accuracy:  0.9776
69 Train accuracy:  1.0 Test accuracy:  0.9779
70 Train accuracy:  1.0 Test accuracy:  0.9773
71 Train accuracy:  1.0 Test accuracy:  0.9776
72 Train accuracy:  1.0 Test accuracy:  0.9783
73 Train accuracy:  1.0 Test accuracy:  0.9776
74 Train accuracy:  1.0 Test accuracy:  0.978
75 Train accuracy:  1.0 Test accuracy:  0.9778
76 Train accuracy:  1.0 Test accuracy:  0.9775
77 Train accuracy:  1.0 Test accuracy:  0.9782
78 Train accuracy:  1.0 Test accuracy:  0.9777
79 Train accuracy:  1.0 Test accuracy:  0.9781
80 Train accuracy:  1.0 Test accuracy:  0.9777
81 Train accuracy:  1.0 Test accuracy:  0.9781
82 Train accuracy:  1.0 Test accuracy:  0.9779
83 Train accuracy:  1.0 Test accuracy:  0.9779
84 Train accuracy:  1.0 Test accuracy:  0.9784
85 Train accuracy:  1.0 Test accuracy:  0.9777
86 Train accuracy:  1.0 Test accuracy:  0.9781
87 Train accuracy:  1.0 Test accuracy:  0.9783
88 Train accuracy:  1.0 Test accuracy:  0.9784
89 Train accuracy:  1.0 Test accuracy:  0.9779
90 Train accuracy:  1.0 Test accuracy:  0.9783
91 Train accuracy:  1.0 Test accuracy:  0.9783
92 Train accuracy:  1.0 Test accuracy:  0.9784
93 Train accuracy:  1.0 Test accuracy:  0.978
94 Train accuracy:  1.0 Test accuracy:  0.9783
95 Train accuracy:  1.0 Test accuracy:  0.9786
96 Train accuracy:  1.0 Test accuracy:  0.9787
97 Train accuracy:  1.0 Test accuracy:  0.9784
98 Train accuracy:  1.0 Test accuracy:  0.9778
99 Train accuracy:  1.0 Test accuracy:  0.9783
100 Train accuracy:  1.0 Test accuracy:  0.9784
101 Train accuracy:  1.0 Test accuracy:  0.9786
102 Train accuracy:  1.0 Test accuracy:  0.9785
103 Train accuracy:  1.0 Test accuracy:  0.979
104 Train accuracy:  1.0 Test accuracy:  0.9782
105 Train accuracy:  1.0 Test accuracy:  0.978
106 Train accuracy:  1.0 Test accuracy:  0.9784
107 Train accuracy:  1.0 Test accuracy:  0.9786
108 Train accuracy:  1.0 Test accuracy:  0.9786
109 Train accuracy:  1.0 Test accuracy:  0.9784
110 Train accuracy:  1.0 Test accuracy:  0.9787
111 Train accuracy:  1.0 Test accuracy:  0.9783
112 Train accuracy:  1.0 Test accuracy:  0.9786
113 Train accuracy:  1.0 Test accuracy:  0.9785
114 Train accuracy:  1.0 Test accuracy:  0.9784
115 Train accuracy:  1.0 Test accuracy:  0.9787
116 Train accuracy:  1.0 Test accuracy:  0.9785
117 Train accuracy:  1.0 Test accuracy:  0.9793
118 Train accuracy:  1.0 Test accuracy:  0.9783
119 Train accuracy:  1.0 Test accuracy:  0.9787
120 Train accuracy:  1.0 Test accuracy:  0.9781
121 Train accuracy:  1.0 Test accuracy:  0.9789
122 Train accuracy:  1.0 Test accuracy:  0.9784
123 Train accuracy:  1.0 Test accuracy:  0.9786
124 Train accuracy:  1.0 Test accuracy:  0.9784
125 Train accuracy:  1.0 Test accuracy:  0.9784
126 Train accuracy:  1.0 Test accuracy:  0.9784
127 Train accuracy:  1.0 Test accuracy:  0.9786
128 Train accuracy:  1.0 Test accuracy:  0.9785
129 Train accuracy:  1.0 Test accuracy:  0.9784
130 Train accuracy:  1.0 Test accuracy:  0.9783
131 Train accuracy:  1.0 Test accuracy:  0.9785
132 Train accuracy:  1.0 Test accuracy:  0.9785
133 Train accuracy:  1.0 Test accuracy:  0.9789
134 Train accuracy:  1.0 Test accuracy:  0.9787
135 Train accuracy:  1.0 Test accuracy:  0.9785
136 Train accuracy:  1.0 Test accuracy:  0.9789
137 Train accuracy:  1.0 Test accuracy:  0.9786
138 Train accuracy:  1.0 Test accuracy:  0.9788
139 Train accuracy:  1.0 Test accuracy:  0.9786
140 Train accuracy:  1.0 Test accuracy:  0.9786
141 Train accuracy:  1.0 Test accuracy:  0.9783
142 Train accuracy:  1.0 Test accuracy:  0.9783
143 Train accuracy:  1.0 Test accuracy:  0.9788
144 Train accuracy:  1.0 Test accuracy:  0.9783
145 Train accuracy:  1.0 Test accuracy:  0.9786
146 Train accuracy:  1.0 Test accuracy:  0.9792
147 Train accuracy:  1.0 Test accuracy:  0.9785
148 Train accuracy:  1.0 Test accuracy:  0.9791
149 Train accuracy:  1.0 Test accuracy:  0.9788
150 Train accuracy:  1.0 Test accuracy:  0.9785
151 Train accuracy:  1.0 Test accuracy:  0.9789
152 Train accuracy:  1.0 Test accuracy:  0.9785
153 Train accuracy:  1.0 Test accuracy:  0.9789
154 Train accuracy:  1.0 Test accuracy:  0.9788
155 Train accuracy:  1.0 Test accuracy:  0.9786
156 Train accuracy:  1.0 Test accuracy:  0.9787
157 Train accuracy:  1.0 Test accuracy:  0.9787
158 Train accuracy:  1.0 Test accuracy:  0.9786
159 Train accuracy:  1.0 Test accuracy:  0.9788
160 Train accuracy:  1.0 Test accuracy:  0.9785
161 Train accuracy:  1.0 Test accuracy:  0.9785
162 Train accuracy:  1.0 Test accuracy:  0.9788
163 Train accuracy:  1.0 Test accuracy:  0.9786
164 Train accuracy:  1.0 Test accuracy:  0.9786
165 Train accuracy:  1.0 Test accuracy:  0.9785
166 Train accuracy:  1.0 Test accuracy:  0.9783
167 Train accuracy:  1.0 Test accuracy:  0.9785
168 Train accuracy:  1.0 Test accuracy:  0.9789
169 Train accuracy:  1.0 Test accuracy:  0.9787
170 Train accuracy:  1.0 Test accuracy:  0.9787
171 Train accuracy:  1.0 Test accuracy:  0.9789
172 Train accuracy:  1.0 Test accuracy:  0.9786
173 Train accuracy:  1.0 Test accuracy:  0.9788
174 Train accuracy:  1.0 Test accuracy:  0.9784
175 Train accuracy:  1.0 Test accuracy:  0.9785
176 Train accuracy:  1.0 Test accuracy:  0.9786
177 Train accuracy:  1.0 Test accuracy:  0.9789
178 Train accuracy:  1.0 Test accuracy:  0.9785
179 Train accuracy:  1.0 Test accuracy:  0.9786
180 Train accuracy:  1.0 Test accuracy:  0.9784
181 Train accuracy:  1.0 Test accuracy:  0.9785
182 Train accuracy:  1.0 Test accuracy:  0.979
183 Train accuracy:  1.0 Test accuracy:  0.9784
184 Train accuracy:  1.0 Test accuracy:  0.9784
185 Train accuracy:  1.0 Test accuracy:  0.9783
186 Train accuracy:  1.0 Test accuracy:  0.9788
187 Train accuracy:  1.0 Test accuracy:  0.9788
188 Train accuracy:  1.0 Test accuracy:  0.9787
189 Train accuracy:  1.0 Test accuracy:  0.9789
190 Train accuracy:  1.0 Test accuracy:  0.9786
191 Train accuracy:  1.0 Test accuracy:  0.9787
192 Train accuracy:  1.0 Test accuracy:  0.9784
193 Train accuracy:  1.0 Test accuracy:  0.9787
194 Train accuracy:  1.0 Test accuracy:  0.9786
195 Train accuracy:  1.0 Test accuracy:  0.9791
196 Train accuracy:  1.0 Test accuracy:  0.9787
197 Train accuracy:  1.0 Test accuracy:  0.9786
198 Train accuracy:  1.0 Test accuracy:  0.9789
199 Train accuracy:  1.0 Test accuracy:  0.9786
200 Train accuracy:  1.0 Test accuracy:  0.9789
201 Train accuracy:  1.0 Test accuracy:  0.9789
202 Train accuracy:  1.0 Test accuracy:  0.9784
203 Train accuracy:  1.0 Test accuracy:  0.9786
204 Train accuracy:  1.0 Test accuracy:  0.9787
205 Train accuracy:  1.0 Test accuracy:  0.9785
206 Train accuracy:  1.0 Test accuracy:  0.9787
207 Train accuracy:  1.0 Test accuracy:  0.9786
208 Train accuracy:  1.0 Test accuracy:  0.9788
209 Train accuracy:  1.0 Test accuracy:  0.979
210 Train accuracy:  1.0 Test accuracy:  0.9785
211 Train accuracy:  1.0 Test accuracy:  0.9785
212 Train accuracy:  1.0 Test accuracy:  0.9786
213 Train accuracy:  1.0 Test accuracy:  0.9787
214 Train accuracy:  1.0 Test accuracy:  0.9786
215 Train accuracy:  1.0 Test accuracy:  0.9787
216 Train accuracy:  1.0 Test accuracy:  0.9786
217 Train accuracy:  1.0 Test accuracy:  0.9784
218 Train accuracy:  1.0 Test accuracy:  0.9786
219 Train accuracy:  1.0 Test accuracy:  0.9788
220 Train accuracy:  1.0 Test accuracy:  0.979
221 Train accuracy:  1.0 Test accuracy:  0.9786
222 Train accuracy:  1.0 Test accuracy:  0.9789
223 Train accuracy:  1.0 Test accuracy:  0.9787
224 Train accuracy:  1.0 Test accuracy:  0.9787
225 Train accuracy:  1.0 Test accuracy:  0.9786
226 Train accuracy:  1.0 Test accuracy:  0.9787
227 Train accuracy:  1.0 Test accuracy:  0.9788
228 Train accuracy:  1.0 Test accuracy:  0.9788
229 Train accuracy:  1.0 Test accuracy:  0.9785
230 Train accuracy:  1.0 Test accuracy:  0.9787
231 Train accuracy:  1.0 Test accuracy:  0.9786
232 Train accuracy:  1.0 Test accuracy:  0.9785
233 Train accuracy:  1.0 Test accuracy:  0.9785
234 Train accuracy:  1.0 Test accuracy:  0.9789
235 Train accuracy:  1.0 Test accuracy:  0.9787
236 Train accuracy:  1.0 Test accuracy:  0.9786
237 Train accuracy:  1.0 Test accuracy:  0.9788
238 Train accuracy:  1.0 Test accuracy:  0.9786
239 Train accuracy:  1.0 Test accuracy:  0.9788
240 Train accuracy:  1.0 Test accuracy:  0.9789
241 Train accuracy:  1.0 Test accuracy:  0.9789
242 Train accuracy:  1.0 Test accuracy:  0.9787
243 Train accuracy:  1.0 Test accuracy:  0.9789
244 Train accuracy:  1.0 Test accuracy:  0.9789
245 Train accuracy:  1.0 Test accuracy:  0.9787
246 Train accuracy:  1.0 Test accuracy:  0.9788
247 Train accuracy:  1.0 Test accuracy:  0.9786
248 Train accuracy:  1.0 Test accuracy:  0.9785
249 Train accuracy:  1.0 Test accuracy:  0.9787
250 Train accuracy:  1.0 Test accuracy:  0.9787
251 Train accuracy:  1.0 Test accuracy:  0.9788
252 Train accuracy:  1.0 Test accuracy:  0.979
253 Train accuracy:  1.0 Test accuracy:  0.9788
254 Train accuracy:  1.0 Test accuracy:  0.9788
255 Train accuracy:  1.0 Test accuracy:  0.9787
256 Train accuracy:  1.0 Test accuracy:  0.9786
257 Train accuracy:  1.0 Test accuracy:  0.9789
258 Train accuracy:  1.0 Test accuracy:  0.9788
259 Train accuracy:  1.0 Test accuracy:  0.9787
260 Train accuracy:  1.0 Test accuracy:  0.9787
261 Train accuracy:  1.0 Test accuracy:  0.9786
262 Train accuracy:  1.0 Test accuracy:  0.9786
263 Train accuracy:  1.0 Test accuracy:  0.9789
264 Train accuracy:  1.0 Test accuracy:  0.9788
265 Train accuracy:  1.0 Test accuracy:  0.979
266 Train accuracy:  1.0 Test accuracy:  0.9788
267 Train accuracy:  1.0 Test accuracy:  0.9787
268 Train accuracy:  1.0 Test accuracy:  0.9786
269 Train accuracy:  1.0 Test accuracy:  0.9787
270 Train accuracy:  1.0 Test accuracy:  0.9787
271 Train accuracy:  1.0 Test accuracy:  0.9789
272 Train accuracy:  1.0 Test accuracy:  0.9787
273 Train accuracy:  1.0 Test accuracy:  0.9788
274 Train accuracy:  1.0 Test accuracy:  0.9786
275 Train accuracy:  1.0 Test accuracy:  0.9787
276 Train accuracy:  1.0 Test accuracy:  0.9786
277 Train accuracy:  1.0 Test accuracy:  0.9788
278 Train accuracy:  1.0 Test accuracy:  0.9789
279 Train accuracy:  1.0 Test accuracy:  0.9789
280 Train accuracy:  1.0 Test accuracy:  0.9787
281 Train accuracy:  1.0 Test accuracy:  0.9788
282 Train accuracy:  1.0 Test accuracy:  0.9787
283 Train accuracy:  1.0 Test accuracy:  0.9787
284 Train accuracy:  1.0 Test accuracy:  0.9789
285 Train accuracy:  1.0 Test accuracy:  0.9791
286 Train accuracy:  1.0 Test accuracy:  0.979
287 Train accuracy:  1.0 Test accuracy:  0.9789
288 Train accuracy:  1.0 Test accuracy:  0.9789
289 Train accuracy:  1.0 Test accuracy:  0.9788
290 Train accuracy:  1.0 Test accuracy:  0.9789
291 Train accuracy:  1.0 Test accuracy:  0.9789
292 Train accuracy:  1.0 Test accuracy:  0.9789
293 Train accuracy:  1.0 Test accuracy:  0.979
294 Train accuracy:  1.0 Test accuracy:  0.9789
295 Train accuracy:  1.0 Test accuracy:  0.9789
296 Train accuracy:  1.0 Test accuracy:  0.9789
297 Train accuracy:  1.0 Test accuracy:  0.9791
298 Train accuracy:  1.0 Test accuracy:  0.9789
299 Train accuracy:  1.0 Test accuracy:  0.9788
300 Train accuracy:  1.0 Test accuracy:  0.9791
301 Train accuracy:  1.0 Test accuracy:  0.9788
302 Train accuracy:  1.0 Test accuracy:  0.979
303 Train accuracy:  1.0 Test accuracy:  0.979
304 Train accuracy:  1.0 Test accuracy:  0.9788
305 Train accuracy:  1.0 Test accuracy:  0.9789
306 Train accuracy:  1.0 Test accuracy:  0.9793
307 Train accuracy:  1.0 Test accuracy:  0.9789
308 Train accuracy:  1.0 Test accuracy:  0.9789
309 Train accuracy:  1.0 Test accuracy:  0.9791
310 Train accuracy:  1.0 Test accuracy:  0.979
311 Train accuracy:  1.0 Test accuracy:  0.979
312 Train accuracy:  1.0 Test accuracy:  0.9791
313 Train accuracy:  1.0 Test accuracy:  0.9788
314 Train accuracy:  1.0 Test accuracy:  0.9789
315 Train accuracy:  1.0 Test accuracy:  0.9791
316 Train accuracy:  1.0 Test accuracy:  0.9791
317 Train accuracy:  1.0 Test accuracy:  0.979
318 Train accuracy:  1.0 Test accuracy:  0.9792
319 Train accuracy:  1.0 Test accuracy:  0.979
320 Train accuracy:  1.0 Test accuracy:  0.979
321 Train accuracy:  1.0 Test accuracy:  0.979
322 Train accuracy:  1.0 Test accuracy:  0.979
323 Train accuracy:  1.0 Test accuracy:  0.979
324 Train accuracy:  1.0 Test accuracy:  0.9791
325 Train accuracy:  1.0 Test accuracy:  0.979
326 Train accuracy:  1.0 Test accuracy:  0.979
327 Train accuracy:  1.0 Test accuracy:  0.9789
328 Train accuracy:  1.0 Test accuracy:  0.9787
329 Train accuracy:  1.0 Test accuracy:  0.9791
330 Train accuracy:  1.0 Test accuracy:  0.9789
331 Train accuracy:  1.0 Test accuracy:  0.979
332 Train accuracy:  1.0 Test accuracy:  0.9788
333 Train accuracy:  1.0 Test accuracy:  0.979
334 Train accuracy:  1.0 Test accuracy:  0.9788
335 Train accuracy:  1.0 Test accuracy:  0.9789
336 Train accuracy:  1.0 Test accuracy:  0.9791
337 Train accuracy:  1.0 Test accuracy:  0.9791
338 Train accuracy:  1.0 Test accuracy:  0.9788
339 Train accuracy:  1.0 Test accuracy:  0.979
340 Train accuracy:  1.0 Test accuracy:  0.9789
341 Train accuracy:  1.0 Test accuracy:  0.9789
342 Train accuracy:  1.0 Test accuracy:  0.9789
343 Train accuracy:  1.0 Test accuracy:  0.9791
344 Train accuracy:  1.0 Test accuracy:  0.979
345 Train accuracy:  1.0 Test accuracy:  0.9788
346 Train accuracy:  1.0 Test accuracy:  0.979
347 Train accuracy:  1.0 Test accuracy:  0.979
348 Train accuracy:  1.0 Test accuracy:  0.9791
349 Train accuracy:  1.0 Test accuracy:  0.979
350 Train accuracy:  1.0 Test accuracy:  0.979
351 Train accuracy:  1.0 Test accuracy:  0.979
352 Train accuracy:  1.0 Test accuracy:  0.9791
353 Train accuracy:  1.0 Test accuracy:  0.9789
354 Train accuracy:  1.0 Test accuracy:  0.9789
355 Train accuracy:  1.0 Test accuracy:  0.979
356 Train accuracy:  1.0 Test accuracy:  0.9791
357 Train accuracy:  1.0 Test accuracy:  0.9788
358 Train accuracy:  1.0 Test accuracy:  0.9789
359 Train accuracy:  1.0 Test accuracy:  0.9788
360 Train accuracy:  1.0 Test accuracy:  0.9788
361 Train accuracy:  1.0 Test accuracy:  0.979
362 Train accuracy:  1.0 Test accuracy:  0.9789
363 Train accuracy:  1.0 Test accuracy:  0.9789
364 Train accuracy:  1.0 Test accuracy:  0.9788
365 Train accuracy:  1.0 Test accuracy:  0.9789
366 Train accuracy:  1.0 Test accuracy:  0.9788
367 Train accuracy:  1.0 Test accuracy:  0.9788
368 Train accuracy:  1.0 Test accuracy:  0.9789
369 Train accuracy:  1.0 Test accuracy:  0.979
370 Train accuracy:  1.0 Test accuracy:  0.979
371 Train accuracy:  1.0 Test accuracy:  0.9788
372 Train accuracy:  1.0 Test accuracy:  0.9788
373 Train accuracy:  1.0 Test accuracy:  0.9787
374 Train accuracy:  1.0 Test accuracy:  0.9789
375 Train accuracy:  1.0 Test accuracy:  0.9789
376 Train accuracy:  1.0 Test accuracy:  0.9787
377 Train accuracy:  1.0 Test accuracy:  0.979
378 Train accuracy:  1.0 Test accuracy:  0.9788
379 Train accuracy:  1.0 Test accuracy:  0.9789
380 Train accuracy:  1.0 Test accuracy:  0.979
381 Train accuracy:  1.0 Test accuracy:  0.979
382 Train accuracy:  1.0 Test accuracy:  0.9789
383 Train accuracy:  1.0 Test accuracy:  0.979
384 Train accuracy:  1.0 Test accuracy:  0.9789
385 Train accuracy:  1.0 Test accuracy:  0.9789
386 Train accuracy:  1.0 Test accuracy:  0.9789
387 Train accuracy:  1.0 Test accuracy:  0.9789
388 Train accuracy:  1.0 Test accuracy:  0.9789
389 Train accuracy:  1.0 Test accuracy:  0.979
390 Train accuracy:  1.0 Test accuracy:  0.979
391 Train accuracy:  1.0 Test accuracy:  0.9789
392 Train accuracy:  1.0 Test accuracy:  0.9789
393 Train accuracy:  1.0 Test accuracy:  0.9789
394 Train accuracy:  1.0 Test accuracy:  0.9788
395 Train accuracy:  1.0 Test accuracy:  0.9787
396 Train accuracy:  1.0 Test accuracy:  0.9788
397 Train accuracy:  1.0 Test accuracy:  0.979
398 Train accuracy:  1.0 Test accuracy:  0.9787
399 Train accuracy:  1.0 Test accuracy:  0.9789

使用训练好的模型

with tf.Session() as sess:
    saver.restore(sess, "./10.2.ckpt")
    X_new_scaled = [...] # some new images (scaled from 0 to 1)
    Z = logits.eval(feed_dict={X: X_new_scaled})
    y_pred = np.argmax(Z, axis=1)

如果需要获得每个分类的概率,可以加一个softmax

Fine-Tune

深度

  • 加深网络可以指数地减少完成某一任务所需要的参数数量;
    底层为简单特征建模,高层复用底层的结果,达到减少参数数量的效果;
  • 网络分层方便模型的迁移
    如果为某个特定的任务A训练出一个合适的模型,
    那么在训练另一个相似的任务B的时候,
    可以借用A的部分底层的权重来初始化B,加快训练的速度
  • 在为某个任务训练模型时,
    可以先考虑一个隐藏层,然后再慢慢增加深度,直到模型出现或即将出现过拟合

宽度

  • 输入/输出层的宽度取决于输入/输出的大小
  • 隐藏层的宽度通常是漏斗状的
    越接近输入层的宽度越大,随着接近输出层而逐一减少宽度;
    这么做的道理是,底层次的特征将被网络的底层部分提取并描述,高层可以容易的利用这些底层的描述
  • 实际训练时,可以故意挑选一个宽度和深度都偏大的模型
    然后采用提前停止等正则化方法来防止进入过拟合,而避免繁琐地寻找更合适的深度和宽度

激活函数

  • 隐藏层通常使用relu或者它的变体
    relu计算速度很快,而且梯度下降算法中不易发生梯度消失或是爆炸
    相比之下,sigmoid和tanh则是saturate的
  • 在分类结果相互独立的分类任务中通常会在输出层使用softmax
    在回归任务中,可以不在输出层上使用激活函数