首頁 > 軟體

Keras中Conv1D的使用及說明

2022-12-17 14:00:34

Conv1D

keras.layers.Conv1D(filters, kernel_size, strides=1, padding='valid', data_format='channels_last', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

1D 折積層 (例如時序折積)。

該層建立了一個折積核,該折積核以 單個空間(或時間)維上的層輸入進行折積, 以生成輸出張量。 如果 use_bias 為 True, 則會建立一個偏置向量並將其新增到輸出中。 最後,如果 activation 不是 None,它也會應用於輸出。

當使用該層作為模型第一層時,需要提供 input_shape 引數(整數元組或 None),例如, (10, 128) 表示 10 個 128 維的向量組成的向量序列, (None, 128) 表示 128 維的向量組成的變長序列。

引數

  • filters: 整數,輸出空間的維度 (即折積中濾波器的輸出數量)。
  • kernel_size: 一個整數,或者單個整數表示的元組或列表, 指明 1D 折積視窗的長度。
  • strides: 一個整數,或者單個整數表示的元組或列表, 指明折積的步長。 指定任何 stride 值 != 1 與指定 dilation_rate 值 != 1 兩者不相容。
  • padding: “valid”, “causal” 或 “same” 之一 (大小寫敏感) “valid” 表示「不填充」。 “same” 表示填充輸入以使輸出具有與原始輸入相同的長度。 “causal” 表示因果(膨脹)折積, 例如,output[t] 不依賴於 input[t+1:], 在模型不應違反時間順序的時間資料建模時非常有用。
  • data_format: 字串, “channels_last” (預設) 或 “channels_first” 之一。輸入的各個維度順序。 “channels_last” 對應輸入尺寸為 (batch, steps, channels) (Keras 中時序資料的預設格式) 而 “channels_first” 對應輸入尺寸為 (batch, channels, steps)。
  • dilation_rate: 一個整數,或者單個整數表示的元組或列表,指定用於膨脹折積的膨脹率。 當前,指定任何 dilation_rate 值 != 1 與指定 stride 值 != 1 兩者不相容。
  • activation: 要使用的啟用函數。 如未指定,則不使用啟用函數 (即線性啟用: a(x) = x)。
  • use_bias: 布林值,該層是否使用偏置向量。
  • kernel_initializer: kernel 權值矩陣的初始化器 。
  • bias_initializer: 偏置向量的初始化器 。
  • kernel_regularizer: 運用到 kernel 權值矩陣的正則化函數。
  • bias_regularizer: 運用到偏置向量的正則化函數。
  • activity_regularizer: 運用到層輸出(它的啟用值)的正則化函數 。
  • kernel_constraint: 運用到 kernel 權值矩陣的約束函數。
  • bias_constraint: 運用到偏置向量的約束函數。

輸入尺寸

3D 張量 ,尺寸為 (batch_size, steps, input_dim)

輸出尺寸

3D 張量,尺寸為 (batch_size, new_steps, filters)。 由於填充或視窗按步長滑動,steps 值可能已更改

輸入輸出尺寸的理解

一般在2D折積中,輸入尺寸很直觀,為 (samples, rows, cols, channels),即為樣本數,行數、列數和通道數四維資訊,但是若以此推斷,在Conv1D總兩維資訊就足夠,中間卻夾雜了一個steps,那這個steps如何去理解呢?

理解steps引數,我們應該跳出影象的思維,1D折積通常施用在時序資料中,在時序資料的輸入中:

  • batch_size: 輸入的樣本數
  • steps: 時間維度,個人認為可以理解成量化後的時間長度,也就是多少個時刻
  • input_dim: 每個時刻的特徵數量

keras Conv1D 一維折積的輸入維度

報錯情況

expected conv1d_1_input to have 3 dimensions, but got array with shape (1, 56)

問題原因

維數不匹配

解決方法

陣列的維數是(1,56),但神經網路維數與陣列維數相反,應該使用(56,1)或(None,1)

同時神經網路的輸入資料應改成三維,即reshape為(1,56,1)

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com