介绍一维卷积神经网络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)