Guest User

Untitled

a guest
Dec 15th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. import numpy as np
  2. import tensorflow as tf
  3.  
  4. # (55000 * 28 * 28): 55000張圖像
  5. from tensorflow.examples.tutorials.mnist import input_data
  6.  
  7. # 讀取數據集
  8. # one_hot 獨熱編碼的編碼(encoding)形式
  9. # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9的十位數字
  10. # 0: 1000000000
  11. # 1: 0100000000
  12. # 2: 0010000000
  13. mnist = input_data.read_data_sets('mnist_data', one_hot=True)
  14.  
  15. # None表示張量(Tensor)的第一個維度可以是任何長度
  16. input_x = tf.placeholder(tf.float32, [None, 28 * 28]) / 255
  17. # 輸出: 10個數字的預測
  18. output_y = tf.placeholder(tf.int32, [None, 10])
  19. # 改變形狀之後的輸入
  20. input_x_images = tf.reshape(input_x, [-1, 28, 28, 1])
  21.  
  22. # 從Test(測試)數據集裡選取3000個手寫數字的圖片和對應label
  23. # 圖片
  24. test_x = mnist.test.images[:3000]
  25. # label
  26. test_y = mnist.test.labels[:3000]
  27.  
  28. # 構建卷積神經網路
  29. # 第1層卷積
  30. # 輸出的形狀會變成[28, 28, 32]
  31. conv1 = tf.layers.conv2d(
  32. inputs=input_x_images, # 形狀[28, 28, 1]
  33. filters=32, # 32個過濾器,輸出的深度(depth)是32
  34. kernel_size=[5, 5], # 過濾器在2維的大小是(5 * 5)
  35. strides=1, # 步長是1
  36. padding='same', # same表示輸出的大小不變,因此需要在外圍補零2圈
  37. activation=tf.nn.relu, # 激動活數是Relu
  38. )
  39.  
  40. # 第1層池化(亞採樣)
  41. # 輸出的形狀會變成[14, 14, 32]
  42. pool1 = tf.layers.max_pooling2d(
  43. inputs=conv1, # 形狀[28,28,32]
  44. pool_size=[2, 2], # 過濾器在2維的大小是(2 * 2)
  45. strides=2, # 步長是2
  46. )
  47.  
  48. # 第2層卷積
  49. # 輸出的形狀會變成[14, 14, 64]
  50. conv2 = tf.layers.conv2d(
  51. inputs=pool1, # 形狀[14, 14, 32]
  52. filters=64, # 64個過濾器,輸出的深度(depth)是64
  53. kernel_size=[5, 5], # 過濾器在2維的大小是(5 * 5)
  54. strides=1, # 步長是1
  55. padding='same', # same表示輸出的大小不變,因此需要在外圍補零2圈
  56. activation=tf.nn.relu, # 激動活數是Relu
  57. )
  58.  
  59. # 第2層池化(亞採樣)
  60. # 輸出的形狀會變成[7, 7, 64]
  61. pool2 = tf.layers.max_pooling2d(
  62. inputs=conv2, # 形狀[14, 14, 64]
  63. pool_size=[2, 2], # 過濾器在2維的大小是(2 * 2)
  64. strides=2, # 步長是2
  65. )
  66.  
  67. # 平坦化(flat)
  68. # -1表示tensorflow會自己推斷維度
  69. # 輸出的形狀會變成[7, 7, 64]
  70. flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
  71.  
  72. # 1024個神經元的全連接層
  73. dense = tf.layers.dense(inputs=flat, units=1024, activation=tf.nn.relu)
  74. # dropout是為了NN不要過擬合
  75. # 丟棄率 50%,rate=0.5
  76. dropout = tf.nn.dropout(inputs=dense, rate=0.5, training=True)
  77.  
  78. # 構建10個神經元的全連接層,這裡不用激活函式來做非線性化了
  79. # 輸出的形狀會變成[1, 1, 10]
  80. logits = tf.layers.dense(inputs=dropout, units=10)
Add Comment
Please, Sign In to add comment