Tensorflow基本用法(二)
阿新 • • 發佈:2018-12-09
介紹在官方文件中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是一個佔位符