1. 程式人生 > >Tensorflow基本用法(二)

Tensorflow基本用法(二)

介紹在官方文件中MNIST進階中用到的函式

1. tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

  • shape:生成張量的形狀
  • mean:正態分佈的均值
  • stddev:正太分佈的標準差
  • dtype:資料型別
  • seed:種子
  • name:操作的命名(可以不指定)
  • 返回值是隨機截斷的正太分佈值填充的張量
initial = tf.truncated_normal([3,3], stddev=0.1)
sess = tf.InteractiveSession()
print(initial.eval())
sess.close()
#[[-0.1338151  -0.01149522 -0.00680522]
[ 0.07212916 -0.1230556 0.07994577] [ 0.1255837 -0.1215869 -0.13001645]]

2. tf.constant(value, dtype=None, shape=None, name=’Const’)

  • value:用於填充的數值或列表
  • dtype:資料型別
  • shape:生成張量的形狀
  • name:操作的命名(可以不指定)
  • 返回值一個常數張量
# Constant 1-D Tensor populated with value list.
tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1
2 3 4 5 6 7] # Constant 2-D tensor populated with scalar value -1. tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]] # Constant 2-D tensor populated with value list. tensor = tf.constant([1,2,3,4,5,6], shape=[2,3]) => [[1 2 3
] [4 5 6]]

3. tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format=’NHWC’, dilations=[1, 1, 1, 1], name=None)

  • input:輸入張量,形狀是4D
  • filter:卷積核,形狀是4D張量,[核高度 , 核寬度 , 輸入通道數, 輸出通道數]
  • strides:步長
  • padding:填充方式,只能選SAME或VALID,SAME在影象邊緣進行0填充,VALID不進行填充
  • use_cudnn_on_gpu:使用gpu加速
  • data_format:輸入維度格式,NHWC依次是批,高度,寬度,通道;NCHW依次是批,通道,高度,寬度
  • dilations:輸入的擴張
  • name:操作的命名(可以不指定)
  • 返回值一個型別與輸入相同的張量

4. tf.nn.max_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None)

  • value:輸入張量,形狀是4D,格式由data_format
  • ksize:輸入張量每個維度的視窗大小,一個4個元素的列表或元組
  • strides:步長
  • padding:填充方式,只能選SAME或VALID,SAME在影象邊緣進行0填充,VALID不進行填充
  • data_format:輸入維度格式,NHWC依次是批,高度,寬度,通道;NCHW依次是批,通道,高度,寬度
  • name:操作的命名(可以不指定)
  • 返回值是經過最大池化的data_format格式的張量
sess = tf.InteractiveSession()
a = tf.constant(np.arange(9),shape = [1,3,3,1])
print(a.eval())
'''
 [[[[0]
   [1]
   [2]]
  [[3]
   [4]
   [5]]
  [[6]
   [7]
   [8]]]]
'''
print(a.eval)
#<bound method Tensor.eval of <tf.Tensor 'Const_1:0' shape=(1, 3, 3, 1) dtype=int32>>
b = tf.nn.max_pool(a,ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME')
print(b.eval())
'''
[[[[4]
   [5]]
  [[7]
   [8]]]]
'''
print(b.eval)
#<bound method Tensor.eval of <tf.Tensor 'MaxPool:0' shape=(1, 2, 2, 1) dtype=int32>> 形狀改變了
sess.close()

5. tf.nn.relu(features, name=None)

  • features:輸入張量(影象特徵)
  • name:操作的命名(可以不指定)
  • 返回值與輸入型別相同的張量
sess = tf.InteractiveSession()
a = tf.constant([-1,-2,2,1],shape = [4])
print(a.eval())
#[-1 -2 2 1]
b = tf.nn.relu(a)
print(b.eval())
#[0 0 2 1]

6. tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None)

  • x:輸入張量
  • keep_prob:神經元被選中概率
  • noise_shape:選中/丟棄
  • seed:種子
  • name:操作的命名(可以不指定)
  • 返回值是一個與輸入相同形狀的張量
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)#必須設定keep_prob,並且keep_prob是一個佔位符