一、介紹
TensorFlow是一個強大的機器學習框架,其中包含了tf.nn模塊,它提供了很多常用的神經網路層,如卷積層、池化層、全連接層等,也包含了很多常用的激活函數,如ReLU、sigmoid、tanh等。在本文中,我們將詳細探究tf.nn模塊中的一些常用函數。
二、卷積神經網路
卷積神經網路是深度學習領域中應用廣泛的一種神經網路。tf.nn模塊提供了很多卷積函數,如tf.nn.conv2d和tf.nn.depthwise_conv2d。其中,tf.nn.conv2d是常用的卷積函數,可以對輸入張量進行二維卷積操作。下面是一個計算卷積的例子:
import tensorflow as tf # 輸入數據(batch_size, input_height, input_width, in_channels) input_data = tf.placeholder(tf.float32, [None, 28, 28, 1]) # 卷積核(filter_height, filter_width, in_channels, out_channels) filter_weight = tf.get_variable("weights", [5, 5, 1, 32], initializer=tf.truncated_normal_initializer(stddev=0.1)) # 偏置(out_channels) biases = tf.get_variable("biases", [32], initializer=tf.constant_initializer(0.0)) # 二維卷積操作 conv = tf.nn.conv2d(input_data, filter_weight, strides=[1, 1, 1, 1], padding='SAME') # 加偏置 output = tf.nn.bias_add(conv, biases) # 使用ReLU激活函數 activation = tf.nn.relu(output)
tf.nn.conv2d函數包含了很多參數,其中最重要的是輸入張量、卷積核、步長和填充方式。輸入張量的shape為(batch_size, input_height, input_width, in_channels),卷積核的shape為(filter_height, filter_width, in_channels, out_channels),步長參數strides是一個四維向量,第一個和最後一個維度必須是1,中間兩個分別表示在height和width維度上的移動步長。填充方式參數padding有兩種取值,SAME表示在圖像外圍進行填充,保持輸出shape與輸入shape相同,VALID表示只對圖像進行卷積,輸出shape縮小了。
三、池化層
池化層是卷積神經網路中常用的一種層,可以有效地減小特徵圖的尺寸,並提取最重要的特徵信息。tf.nn模塊提供了很多池化函數,如tf.nn.max_pool和tf.nn.avg_pool。下面是一個計算最大池化的例子:
import tensorflow as tf # 輸入數據(batch_size, input_height, input_width, in_channels) input_data = tf.placeholder(tf.float32, [None, 28, 28, 1]) # 最大池化層(kernel_size, strides, padding) pool = tf.nn.max_pool(input_data, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
tf.nn.max_pool函數也包含了很多參數,其中最重要的是輸入張量、池化核大小、步長和填充方式。與卷積函數類似,池化函數的輸入張量的shape為(batch_size, input_height, input_width, in_channels),池化核大小參數ksize是一個四維向量,第一個和最後一個維度必須是1,中間兩個分別表示在height和width維度上的池化大小。步長參數strides是一個四維向量,第一個和最後一個維度必須是1,中間兩個分別表示在height和width維度上的移動步長。填充方式參數padding與卷積函數相同。
四、全連接層
全連接層是神經網路中最基本的一種層,它將神經元按照一定的方式連接起來,輸出與輸入向量大小相同。tf.nn模塊提供了tf.nn.dense函數,可以實現全連接層的功能。下面是一個計算全連接層的例子:
import tensorflow as tf # 輸入數據(batch_size, input_size) input_data = tf.placeholder(tf.float32, [None, 784]) # 全連接層(weights_size, biases_size) weights = tf.get_variable("weights", [784, 10], initializer=tf.truncated_normal_initializer(stddev=0.1)) biases = tf.get_variable("biases", [10], initializer=tf.constant_initializer(0.0)) # 全連接操作 output = tf.nn.bias_add(tf.matmul(input_data, weights), biases)
tf.nn.dense函數也包含了很多參數,其中最重要的是輸入張量、權重張量和偏置張量。輸入張量的shape為(batch_size, input_size),權重張量的shape為(input_size, output_size),偏置張量的shape為(output_size,),輸出張量的shape為(batch_size, output_size)。
五、激活函數
激活函數是神經網路中的重要組成部分,它將神經元的輸入進行非線性變換,加入了網路的非線性能力。tf.nn模塊提供了很多激活函數,如ReLU、sigmoid和tanh等。下面是一個使用ReLU激活函數的例子:
import tensorflow as tf # 輸入數據(batch_size, input_size) input_data = tf.placeholder(tf.float32, [None, 784]) # 全連接層(weights_size, biases_size) weights = tf.get_variable("weights", [784, 10], initializer=tf.truncated_normal_initializer(stddev=0.1)) biases = tf.get_variable("biases", [10], initializer=tf.constant_initializer(0.0)) # 全連接操作 output = tf.nn.bias_add(tf.matmul(input_data, weights), biases) # 使用ReLU激活函數 activation = tf.nn.relu(output)
tf.nn模塊中的激活函數非常簡單易用,只需要將輸入張量傳入相應的函數即可。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204290.html