TensorFlow 神經(jīng)網(wǎng)絡

2019-01-31 18:11 更新
注意:接受 Tensor 參數(shù)的函數(shù)也可以接受被 tf.convert_to_tensor 接受的任何內(nèi)容.

TensorFlow 激活函數(shù)

激活操作提供用于神經(jīng)網(wǎng)絡的不同類型的非線性。這些包括平滑的非線性(sigmoid,tanh,elu,softplus,和softsign),連續(xù)的,但不是到處可微函數(shù)(relu,relu6,crelu和relu_x),和隨機正規(guī)化(dropout)。

所有激活操作應用于分量,并產(chǎn)生與輸入張量相同形狀的張量。

TensorFlow 卷積運算

卷積運算在一批圖像上掃描2維濾鏡,將濾鏡應用到適當大小的每個圖像的每個窗口。不同的操作在通用和特定過濾器之間取舍:

  • conv2d:可以將通道混合在一起的任意濾波器
  • depthwise_conv2d:獨立對每個通道進行操作的過濾器
  • separable_conv2d:深度方向的空間濾波器,后跟一個點濾波器

注意,盡管這些操作被稱為“卷積”,但它們嚴格地說是“互相關”,因為濾波器與輸入窗口組合而不反轉濾波器。

過濾器應用于與過濾器相同大小的圖像補丁,并根據(jù) strides 參數(shù)進行分段。strides = [1, 1, 1, 1] 在每個偏移處將濾鏡應用到貼片,strides = [1, 2, 2, 1] 將濾鏡應用到每個維度中的每個其他圖像補丁等。

忽略通道,假設4維 input 具有shape [batch, in_height, in_width, ...],4維 filter具有shape [filter_height, filter_width, ...],則卷積運算的空間語義如下:首先,根據(jù)選擇的填充方案 'SAME' 或 'VALID' 輸出大小和計算填充像素。對于 'SAME' 填充,輸出高度和寬度計算如下:

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))

沿高度和寬度應用的總填充量計算如下:

if (in_height % strides[1] == 0):
  pad_along_height = max(filter_height - strides[1], 0)
else:
  pad_along_height = max(filter_height - (in_height % strides[1]), 0)
if (in_width % strides[2] == 0):
  pad_along_width = max(filter_width - strides[2], 0)
else:
  pad_along_width = max(filter_width - (in_width % strides[2]), 0)

最后,頂部,底部,左側和右側的填充是:

pad_top = pad_along_height // 2
pad_bottom = pad_along_height - pad_top
pad_left = pad_along_width // 2
pad_right = pad_along_width - pad_left

請注意,除以2意味著可能會出現(xiàn)兩側的填充(頂部與底部,右側和左側)關閉的情況.在這種情況下,底部和右側總是得到一個額外的填充像素。例如,當 pad_along_height 為 5 時,我們在頂部填充2個像素,在底部填充3個像素。請注意,這不同于現(xiàn)有的庫,如 cuDNN 和 Caffe,它們明確指定了填充像素的數(shù)量,并且始終在兩側都填充相同數(shù)量的像素。

對于'VALID“填充”,輸出高度和寬度計算如下:

out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))

并且沒有使用填充。

給定輸出大小和填充,輸出可以計算為:

$ output[b, i, j, :] = sum_{d_i, d_j} input[b, strides[1] * i + d_i - pad_{top},\ strides[2] * j + d_j - pad_{left}, ...] * filter[d_i, d_j,\ ...]$

其中在原始輸入圖像區(qū)域之外的任何值被認為是零(即,我們在圖像的邊界周圍填充零值)。

因為 input 是4維的,所以每個 input[b, i, j, :]都是一個向量。因為 conv2d,這些向量被 filter[di, dj, :, :] 矩陣乘以產(chǎn)生新的向量。因為 depthwise_conv_2d,每個標量分量 input[b, i, j, k]乘以一個向量 filter[di, dj, k],并且所有的向量都被連接起來。

池操作

池操作通過輸入張量掃描矩形窗口,計算每個窗口的縮減操作(平均值,最大值或最大值與 argmax).每個池操作使用大小 ksize 由偏移量分隔的矩形窗口 strides。例如,如果 strides 每個窗口都是所有窗口,如果每個窗口都是 strides 每個窗口都使用兩個等等。

詳細來說,輸出是:

output[i] = reduce(value[strides * i:strides * i + ksize])

其中指數(shù)也考慮到填充值。Convolution 有關填充計算的詳細信息,請參閱該部分。

形態(tài)學濾波

形態(tài)運算符是圖像處理中使用的非線性濾波器。

灰度形態(tài)擴張是標準求和積卷積的最大和對數(shù):

$ output[b, y, x, c] = max_{dy, dx} input[b, strides[1] * y + rates[1] * dy, strides[2] * x + rates[2] * dx, c] + filter[dy, dx, c]$

在 filter 通常被稱為構造功能。當過濾器采用全零值(也稱為平面結構化功能)時,最大匯集是灰度形態(tài)擴張的特殊情況。

灰度形態(tài)侵蝕是標準和積卷積的最小和對數(shù):

$ output[b, y, x, c] = min_{dy, dx} input[b, strides[1] * y - rates[1] * dy, strides[2] * x - rates[2] * dx, c] - filter[dy, dx, c]$

膨脹和侵蝕是相互的。構造信號 g 的輸入信號 f 的擴張等于對 f 的反射 g 的侵蝕的否定,反之亦然。

以與標準卷積完全相同的方式進行橫移和填充.詳情請參閱Convolution一節(jié)。

規(guī)范化

規(guī)范化是有用的,以防止神經(jīng)元飽和時,輸入可能有不同的規(guī)模,并幫助泛化。

TensorFlow 損失操作

損失操作測量兩張量之間或在張量和零之間的誤差。這些可以用于測量網(wǎng)絡在回歸任務中的準確度,或用于正則化目的 (重量衰減)。

TensorFlow 分類操作

TensorFlow 提供了幾個可以幫助您執(zhí)行分類的操作。

  • 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
  • tf.nn.weighted_cross_entropy_with_logits

TensorFlow 查找嵌套的張量

TensorFlow 提供庫支持查找嵌套張量的值。

TensorFlow 構造遞歸神經(jīng)網(wǎng)絡

TensorFlow 提供了一些構建循環(huán)神經(jīng)網(wǎng)絡的方法。最接受一個 RNNCell-subclassed 對象(參見文檔 tf.contrib.rnn)。

連接時間分類(CTC)

評估

評估操作對于測量網(wǎng)絡的性能很有用。它們通常在評估時使用。

采樣抽樣

您是否要培養(yǎng)具有數(shù)千或數(shù)百萬個輸出類的多類或多標簽模型(例如,具有較大詞匯量的語言模型)?在這種情況下,使用完整的 Softmax 進行訓練是緩慢的,因為對于每個訓練示例都對所有課程進行了評估。候選抽樣訓練算法可以通過僅考慮每批培訓示例的對比性類別(稱為候選)的小隨機選擇子集來加快您的步驟時間。

采樣損失函數(shù)

TensorFlow 提供以下采樣丟失功能,用于更快的訓練。

  • tf.nn.nce_loss
  • tf.nn.sampled_softmax_loss

候選采樣

TensorFlow 提供以下采樣器,用于在使用上述采樣丟失函數(shù)之一時隨機抽樣候選類。

雜項候選采樣工具

TensorFlow 量化操作

  • tf.nn.quantized_conv2d
  • tf.nn.quantized_relu_x
  • tf.nn.quantized_max_pool
  • tf.nn.quantized_avg_pool
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號