tensorlayer學習日誌1_chapter2_2.4

自學 tensorflow有一段時間了,陸續看了好幾本書,但是因爲時間久遠問題,看教材決是被卡,很多時候也百度不出個答案來,沒辦法只能先選條捷徑,以後再回來慢慢被 tensorflow的各內部程序吧,要不可真要從入門到放棄咯~~~

這幾天在瞭解 tflearn時,發現tensorlayer,感覺這個做突破口比較好,所以決定開始入坑學起~~

https://download.csdn.net/download/u011276167/10367858  電子版下載在這~~

我用的系統是 windows7和windows10,anaconda, py3.5和py3.6,tensorflow1.8.0~~cpu,tensorlayer1.8.0,電腦很破~~所以訓練時都是按最低要求來訓練~

http://tensorlayercn.readthedocs.io/zh/latest/ 中文版文檔在這~~

http://tensorlayer.readthedocs.io/en/latest/ 英文版文檔在這~~

那從教材《一起玩轉tensorlayer》的第二章的2.4開始吧~~

import tensorflow as tf

# x = tf.ones([2, 3])
# x = tf.constant([1, 2, 3, 4], shape=[2,2])
# sess = tf.Session()
# a = sess.run(x)
# print(a)
# print(x.get_shape())
# print(x.get_shape().as_list())

# sess = tf.InteractiveSession()
# x = tf.constant([1, 1, 2, 1], shape=[2,2])
# print(sess.run(x))
# y = tf.constant([5, 4, 3], shape=[2,2])
# print(sess.run(y))
# a = sess.run(tf.matmul(x,y))
# print(a)
# # matmul是矩陣行元素乘對應列再相加
# # multiply是矩陣各元素對應位置相乘,要求兩矩陣必須同樣大小
# b = sess.run(tf.multiply(x,y))
# print(b)
# c = sess.run(x*y)
# print(c)

# x = tf.placeholder(tf.float32, shape=[None, 3], name='x1')
# w = tf.Variable([[1.0, 2.0, 3.0]])
# y = tf.matmul(x, tf.transpose(w))
# w.initializer.run()
# out = sess.run(y, feed_dict={x: [[1.0,2.0,3.0],[1.0,1.0,1.0]]})
# # 1*1+2*2+3*3=14
# print(out)
# 
import tensorlayer as tl

X_train, y_train, X_val, y_val, X_test, y_test = tl.files.load_mnist_dataset(shape=[-1,784])
print(X_train.shape, y_train.shape)
print(X_val.shape, y_val.shape)
print(X_test.shape, y_test.shape)

sess = tf.InteractiveSession()

x=tf.placeholder(tf.float32, shape=[None, 784], name='x')
y_=tf.placeholder(tf.int64, shape=[None, ], name='y_')

network = tl.layers.InputLayer(x, name='input')
network = tl.layers.DropoutLayer(network, keep=0.8, name='drop1')
network = tl.layers.DenseLayer(network, 800, tf.nn.relu, name='relu1')
network = tl.layers.DropoutLayer(network, keep=0.5, name='drop2')
network = tl.layers.DenseLayer(network, 800, tf.nn.relu, name='relu2')
network = tl.layers.DropoutLayer(network, keep=0.5, name='drop3')
network = tl.layers.DenseLayer(network, 10, tf.identity, name = 'output')

y = network.outputs
y_op = tf.argmax(tf.nn.softmax(y),1)
cost = tl.cost.cross_entropy(y,y_,name='entropy')
correct_prediction = tf.equal(tf.argmax(y,1),y_)
acc = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

train_params = network.all_params
train_op = tf.train.AdamOptimizer(learning_rate=0.0001).minimize(cost, var_list=train_params)

tl.layers.initialize_global_variables(sess)

network.print_params()
network.print_layers()

tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_,
            acc=acc, batch_size=600, n_epoch=500, print_freq=25,
            X_val=X_val, y_val=y_val, eval_train=False)

tl.utils.test(sess, network, acc, X_test, y_test, x, y_, batch_size=None, cost=cost)

tl.files.save_npz(network.all_params , name='model.npz')
sess.close()

輸出如下:這裏MINST數據集會自動下載的,我這是之前下載過,所以沒顯示出來

[TL] Load or Download MNIST > data\mnist
[TL] data\mnist\train-images-idx3-ubyte.gz
[TL] data\mnist\t10k-images-idx3-ubyte.gz
(50000, 784) (50000,)
(10000, 784) (10000,)
(10000, 784) (10000,)
[TL] InputLayer  input: (?, 784)
[TL] DropoutLayer drop1: keep:0.800000 is_fix:False
[TL] DenseLayer  relu1: 800 relu
[TL] DropoutLayer drop2: keep:0.500000 is_fix:False
[TL] DenseLayer  relu2: 800 relu
[TL] DropoutLayer drop3: keep:0.500000 is_fix:False
[TL] DenseLayer  output: 10 identity
[TL]   param   0: relu1/W:0            (784, 800)         float32_ref (mean: 7.646034646313637e-05, median: 7.379607268376276e-05, std: 0.08799773454666138)   
[TL]   param   1: relu1/b:0            (800,)             float32_ref (mean: 0.0               , median: 0.0               , std: 0.0               )   
[TL]   param   2: relu2/W:0            (800, 800)         float32_ref (mean: 9.20881939237006e-06, median: 0.00012011492071906105, std: 0.08787252753973007)   
[TL]   param   3: relu2/b:0            (800,)             float32_ref (mean: 0.0               , median: 0.0               , std: 0.0               )   
[TL]   param   4: output/W:0           (800, 10)          float32_ref (mean: 0.0022586837876588106, median: 0.001404931303113699, std: 0.08736483752727509)   
[TL]   param   5: output/b:0           (10,)              float32_ref (mean: 0.0               , median: 0.0               , std: 0.0               )   
[TL]   num of params: 1276810
[TL]   layer   0: drop1/mul:0          (?, 784)           float32
[TL]   layer   1: relu1/Relu:0         (?, 800)           float32
[TL]   layer   2: drop2/mul:0          (?, 800)           float32
[TL]   layer   3: relu2/Relu:0         (?, 800)           float32
[TL]   layer   4: drop3/mul:0          (?, 800)           float32
[TL]   layer   5: output/Identity:0    (?, 10)            float32
[TL] Start training the network ...
[TL] Epoch 1 of 500 took 13.302852s
[TL]    val loss: 0.593346
[TL]    val acc: 0.806667
[TL] Epoch 25 of 500 took 13.056165s
[TL]    val loss: 0.152897
[TL]    val acc: 0.958646
[TL] Epoch 50 of 500 took 14.379701s
[TL]    val loss: 0.103411
[TL]    val acc: 0.971458
[TL] Epoch 75 of 500 took 13.523496s
[TL]    val loss: 0.081572
[TL]    val acc: 0.976250
[TL] Epoch 100 of 500 took 15.612597s
[TL]    val loss: 0.069241
[TL]    val acc: 0.979896
[TL] Epoch 125 of 500 took 15.480233s
[TL]    val loss: 0.064424
[TL]    val acc: 0.980729
[TL] Epoch 150 of 500 took 15.531174s
[TL]    val loss: 0.061136
[TL]    val acc: 0.982292
[TL] Epoch 175 of 500 took 14.595490s
[TL]    val loss: 0.057786
[TL]    val acc: 0.983229
[TL] Epoch 200 of 500 took 14.600940s
[TL]    val loss: 0.055876
[TL]    val acc: 0.983854
[TL] Epoch 225 of 500 took 14.647618s
[TL]    val loss: 0.055536
[TL]    val acc: 0.983542
[TL] Epoch 250 of 500 took 14.723672s
[TL]    val loss: 0.054065
[TL]    val acc: 0.984375
[TL] Epoch 275 of 500 took 14.559059s
[TL]    val loss: 0.053935
[TL]    val acc: 0.984896
[TL] Epoch 300 of 500 took 14.629505s
[TL]    val loss: 0.053766
[TL]    val acc: 0.985833
[TL] Epoch 325 of 500 took 14.594821s
[TL]    val loss: 0.055415
[TL]    val acc: 0.984583
[TL] Epoch 350 of 500 took 14.608483s
[TL]    val loss: 0.053293
[TL]    val acc: 0.985313
[TL] Epoch 375 of 500 took 14.612728s
[TL]    val loss: 0.054767
[TL]    val acc: 0.984896
[TL] Epoch 400 of 500 took 14.606371s
[TL]    val loss: 0.056266
[TL]    val acc: 0.985208
[TL] Epoch 425 of 500 took 14.596624s
[TL]    val loss: 0.055784
[TL]    val acc: 0.985833
[TL] Epoch 450 of 500 took 14.591042s
[TL]    val loss: 0.054977
[TL]    val acc: 0.985521
[TL] Epoch 475 of 500 took 14.641674s
[TL]    val loss: 0.054210
[TL]    val acc: 0.986146
[TL] Epoch 500 of 500 took 14.607706s
[TL]    val loss: 0.054516
[TL]    val acc: 0.985729
[TL] Total training time: 7349.427401s
[TL] Start testing the network ...
[TL]    test loss: 0.047028
[TL]    test acc: 0.987600
[TL] [*] model.npz saved
[Finished in 7355.9s]

這裏有個小坑,tl.layers.initialize_global_variables(sess) 我第一次運行時報錯,說是要用原始的tf.global_variables_initializer(),改成原始的tf.global_variables_initializer()後,報錯消失,但是network.print_params()和network.print_layers()沒反應,沒有輸出任何東東~~

經過一番折騰,發現我用pip install tensorlayer時anaconda自動幫我安上1.9.1版本的tensorlayer了,而我用的tensorflow是1.8.0的,然後我想pip install tensorlayer==1.8.0時外源又不行了~~果斷用 pip install tensorlayer==1.8.0 -i http://pypi.doubanio.com/simple/, 但是又不行,說是http不安全,然後百度了下說是加了個s 就成功了~~

pip install tensorlayer==1.8.0 -i https://pypi.doubanio.com/simple/

豆瓣源真好,真全~~

運行了很久,然後在 py文件的同目錄生成了model 文件,並存了下載來的MINST數據集,最後我用的是sublime運行的,網上有打補丁的方法,但是我沒改快捷鍵,因爲默認的F7運行鍵就很好用了,要想中途停下來就:工具》取消編譯就行了

PS:差點漏了個重要的:

tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_,
            acc=acc, batch_size=600, n_epoch=500, print_freq=25,
            X_val=X_val, y_val=y_val, eval_train=False,tensorboard=True)

這裏加個tensorboard=True是可以生成EVENT的,然後也可以用tensorboard看調參過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章