Tensorflow中構建神經網絡所需要的神經元函數,包括各種激活函數,卷積函數,池化函數,損失函數,優化器等。
激活函數運行時激活神經網絡中某一部分神經元,將激活信息向後傳入下一層的神經網絡。神經網絡之所以能解決非線性問題(如語音,圖像識別),本質上就是激活函數加入非線性因素,彌補了線性模型的表達力,把“激活的神經元的特徵”通過函數保留並映射到下一層。
tf.nn.relu()
tf.nn.sigmoid()
tf.nn.tanh()
tf.nn.elu()
tf.nn.bias_add()
tf.nn.crelu()
tf.nn.relu6()
tf.nn.softplus()
tf.nn.softsign()
tf.nn.dropout()#防止過擬合,用來捨棄某些神經元
激活函數輸入均要計算x,輸出均爲與x數據類型相同的張量。
import tensorflow as tf
a = tf.constant([[1.0,2.0],[1.0,2.0],[1.0,2.0]])
with tf.Session() as sess:
print(sess.run(tf.sigmoid(a)))
卷積函數:
卷積函數時構建神經網絡的重要支架,是在一批圖像上掃描的二維過濾器。
這個函數計算N維卷積之和
tf.nn.convolution(input,filter,padding,strides = None,dilation_rate = None,name = None,data_format = None)
這個函數對一個4維的輸入數據input和4維的卷積核filter進行操作,然後對輸入數據進行一個二維的卷積操作,最後得到卷積之後的結果
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu = None,data_format = None,name = None)
input_data = tf.Variable(np.random.rand(10,9,9,3),dtype=np.float32)
filter_data = tf.Variable(np.random.rand(2,2,3,2),dtype=np.float32)
y = tf.nn.conv2d(input_data,filter_data,strides=[1,1,1,1],padding='SAME')
tf.nn.depthwise_conv2d(input,filter,strides,padding,rate = None,name = None,data_format = None)
tf.nn.separable_conv2d(input,depthwise_filter,pointwise_filter,strides,padding,rate = None,name = None,data_format = None)
tf.nn.atrous_conv2d(value,filter,rate,padding,name=None)
tf.nn.conv2d_transpose(value,filter,output_shape,strides,padding='SAME',data_format='NHWC',name=None)
tf.nn.convld(value,filters,strides,padding,use_cudnn_on_gpu=None,data_format=None,name=None)
tf.nn.conv3d(input,filter,strides,padding,name=None)
tf.nn.conv3d_transpose(value,fliter,output_shape,strides,padding='SAME',name=None)
池化函數:
在神經網絡中,池化函數一般跟在卷積函數的下一層
tf.nn.avg_pool()
tf.nn.max_pool()
tf.nn.max_pool_with_argmax()
tf.nn.avg_pool3d()
tf.nn.max_pool3d()
tf.nn.fractional_avg_pool()
tf.nn.fractional_max_pool()
tf.nn.pool()
input_data = tf.Variable(np.random.rand(10,6,6,3),dtype = np.float32)
filter_data = tf.Variable(np.random.rand(2,2,3,10),dtype = np.float32)
y = tf.nn.conv2d(input_data,filter_data,strides = [1,1,1,1],padding = 'SAME')
output = tf.nn.avg_pool(value = y,ksize = [1,2,2,1],strides = [1,1,1,1],padding = 'SAME')
分類函數:
tensorflow中常見的分類函數主要有:
tf.nn.sigmoid_cross_entropy_with_logits()
tf.nn.softmax()
tf.nn.log_softmax()
tf.nn.softmax_cross_entropy_with_logits()
tf.nn.sparse_softmax_cross_entropy_with_logits()