介紹一維卷積神經網絡html
卷積神經網絡可以進行卷積運算,從局部輸入圖塊中提取特徵,並可以將表示模塊化,同時能夠高效地利用數據。這些性質讓卷積神經網絡在計算機視覺領域表現優異,一樣也讓它對序列處理特別有效。對於某些序列處理問題,這種一維卷積神經網絡的效果能夠媲美 RNN,並且計算代價一般要小不少,而且,對於文本分類和時間序列預測等簡單任務,小型的一維卷積神經網絡能夠替代 RNN,並且速度更快網絡
二維卷積是從圖像張量中提取二維圖塊並對每一個圖塊應用相同的變換,按照一樣的方法,也可使用一維卷積,從序列中提取局部一維序列段(即子序列)。這種一維卷積層能夠識別序列中的局部模式。由於對每一個序列段執行相同的輸入變換,因此在句子中某個位置學到的模式稍後能夠在其餘位置被識別,這使得一維卷積神經網絡具備平移不變性(對於時間平移而言),以下,該一維卷積可以學習長度不大於5的單詞或單詞片斷,所以,字符級的一維卷積神經網絡可以學會單詞構詞法
架構
序列數據的一維池化:從輸入中提取一維序列段(即子序列),而後輸出其最大值(最大池化)或平均值(平均池化)。該操做也是用於下降一維輸入的長度模塊化
Keras中的一維卷積神經網絡是 Conv1D 層,它接收的輸入形狀是(samples, time, features)的三維張量,並返回相似形狀的三維張量。卷積窗口是時間軸上的一維窗口(時間軸是輸入張量的第二個軸)學習
一維卷積神經網絡的架構與二維卷積神經網絡相同,它是 Conv1D 層和 MaxPooling1D層的堆疊,最後是一個全局池化層或 Flatten 層,將三維輸出轉換爲二維輸出,讓你能夠向模型中添加一個或多個 Dense 層,用於分類或迴歸。不過兩者有一點不一樣:一維卷積神經網絡可使用更大的卷積窗口。對於二維卷積層,3×3 的卷積窗口包含 3×3=9 個特徵向量;但對於一位卷積層,大小爲 3 的卷積窗口只包含 3個卷積向量。所以,你能夠輕鬆使用大小等於 7 或 9 的一維卷積窗口code
Demo,使用網絡架構爲
htm
from keras.datasets import imdb from keras.preprocessing import sequence from keras.models import Sequential from keras import layers from keras.optimizers import RMSprop import tools max_features = 1000 max_len = 500 (x_train, y_train),(x_test, y_test) = imdb.load_data(path="E:\\study\\dataset\\imdb.npz",num_words=max_features) x_train = sequence.pad_sequences(x_train, maxlen=max_len) x_test = sequence.pad_sequences(x_test, maxlen=max_len) model = Sequential() # 詞嵌入,將人類的語言映射到幾何空間中 model.add(layers.Embedding(max_features, 128, input_length=max_len)) model.add(layers.Conv1D(32, 7, activation='relu')) # 對時域1D信號進行最大值池化 model.add(layers.MaxPooling1D(5)) model.add(layers.Conv1D(32, 7, activation='relu')) # 對於時間信號的全局最大池化 model.add(layers.GlobalMaxPooling1D()) model.add(layers.Dense(1)) model.summary() model.compile(optimizer=RMSprop(lr=1e-4), loss='binary_crossentropy', metrics=['acc']) history = model.fit(x_train, y_train, epochs=10, batch_size=128, validation_split=0.2) tools.draw_acc_and_loss(history)
tools.pyblog
import matplotlib.pyplot as plt # 繪製network fit history def draw_acc_and_loss(history): acc = history.history['acc'] val_acc = history.history['val_acc'] loss = history.history['loss'] val_loss = history.history['val_loss'] epochs = range(1, len(loss) + 1) plt.figure() plt.plot(epochs, acc, 'bo', label='Training acc') plt.plot(epochs, val_acc, 'b', label='Validation acc') plt.title('Training and validation acc') plt.legend() plt.show() plt.plot(epochs, loss, 'bo', label='Training loss') plt.plot(epochs, val_loss, 'b', label='Validation loss') plt.title('Training and validation loss') plt.legend() plt.show()
結果爲
Acc
get
Loss
input
二維卷積神經網絡在二維空間中處理視覺模式時表現很好,與此相同,一維卷積神經網絡在處理時間模式時表現也很好。對於某些問題,特別是天然語言處理任務,它能夠替代 RNN,而且速度更快
一般狀況下,一維卷積神經網絡的架構與計算機視覺領域的二維卷積神經網絡很類似,它將 Conv1D 層和 MaxPooling1D 層堆疊在一塊兒,最後是一個全局池化運算或展平操做
由於 RNN 在處理很是長的序列時計算代價很大,但一維卷積神經網絡的計算代價很小,因此在 RNN 以前使用一維卷積神經網絡做爲預處理步驟是一個好主意,這樣可使序列變短,並提取出有用的表示交給 RNN 來處理
Deep learning with Python 學習筆記(8)
Deep learning with Python 學習筆記(6)