2017-04-07 90 views
1

我從here尋找一個代碼爲Python 3.5 + TensorFlow + TFLearn:爲什麼卷積網絡使用每64個圖像進行訓練?

# -*- coding: utf-8 -*- 

""" Convolutional Neural Network for MNIST dataset classification task. 

References: 
    Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. "Gradient-based 
    learning applied to document recognition." Proceedings of the IEEE, 
    86(11):2278-2324, November 1998. 

Links: 
    [MNIST Dataset] http://yann.lecun.com/exdb/mnist/ 

""" 

from __future__ import division, print_function, absolute_import 

import tflearn 
from tflearn.layers.core import input_data, dropout, fully_connected 
from tflearn.layers.conv import conv_2d, max_pool_2d 
from tflearn.layers.normalization import local_response_normalization 
from tflearn.layers.estimator import regression 

# Data loading and preprocessing 
import tflearn.datasets.mnist as mnist 
X, Y, testX, testY = mnist.load_data(one_hot=True) 
X = X.reshape([-1, 28, 28, 1]) 
testX = testX.reshape([-1, 28, 28, 1]) 

# Building convolutional network 
network = input_data(shape=[None, 28, 28, 1], name='input') 
network = conv_2d(network, 32, 3, activation='relu', regularizer="L2") 
network = max_pool_2d(network, 2) 
network = local_response_normalization(network) 
network = conv_2d(network, 64, 3, activation='relu', regularizer="L2") 
network = max_pool_2d(network, 2) 
network = local_response_normalization(network) 
network = fully_connected(network, 128, activation='tanh') 
network = dropout(network, 0.8) 
network = fully_connected(network, 256, activation='tanh') 
network = dropout(network, 0.8) 
network = fully_connected(network, 10, activation='softmax') 
network = regression(network, optimizer='adam', learning_rate=0.01, 
        loss='categorical_crossentropy', name='target') 

# Training 
model = tflearn.DNN(network, tensorboard_verbose=0) 
model.fit({'input': X}, {'target': Y}, n_epoch=20, 
      validation_set=({'input': testX}, {'target': testY}), 
      snapshot_step=100, show_metric=True, run_id='convnet_mnist') 

好,它的工作原理。但它在學習時只使用集合中的每一個第64個圖像。爲什麼會發生? 如果我有一個小組,並希望網絡使用每個第一個圖像,我應該怎麼做?

Training Step: 1 | time: 2.416s 
| Adam | epoch: 001 | loss: 0.00000 -- iter: 064/55000 
Training Step: 2 | total loss: 0.24470 | time: 4.621s 
| Adam | epoch: 001 | loss: 0.24470 -- iter: 128/55000 
Training Step: 3 | total loss: 0.10852 | time: 6.876s 
| Adam | epoch: 001 | loss: 0.10852 -- iter: 192/55000 
Training Step: 4 | total loss: 0.20421 | time: 9.129s 
| Adam | epoch: 001 | loss: 0.20421 -- iter: 256/55000 

回答

0

它不僅使用每64個圖像訓練消息的

實施例,它被加載64圖像的批次。這就是爲什麼你每次看到iter增加64次,因爲它在每個訓練步驟中處理了64個圖像。 查看回歸層http://tflearn.org/layers/estimator/的文檔,在這裏您可以設置批處理大小。

+0

是的,你是對的,但我已經設法通過自己做。儘管如此,非常感謝。 – segrnegr

-1

我自己做過。 此參數由調整batch_sizemodel.fit。默認情況下,它是64 因此,要使用你需要重寫的最後一個字符串中的下路的每首圖像:

model.fit({'input': X}, {'target': Y}, n_epoch=20, 
      validation_set=({'input': testX}, {'target': testY}), 
      snapshot_step=100, batch_size=1, 
      show_metric=True,run_id='convnet_mnist') 
+0

它使用每個圖像進行訓練,即使批量大小爲64.它也不會爲每個圖像打印一行。 – interjay

+0

那麼爲什麼batch_size = 64的訓練步驟少於batch_size = 1呢? – segrnegr

+0

因爲每個步驟都訓練64個圖像。 – interjay

相關問題