赞
踩
近些年,关于时间序列、自然语言处理等任务大家一般都会想到RNN、LSTM、GRU,一维CNN以及后面延伸出的Bi-Lstm、ConvLstm等等,这是因为RNN天生可以记住以前时段的信息,而传统的神经网络并不具有这个功能。卷积神经网络和循环神经网络作为深度学习的两大支柱,已近被越来越多的学者进行研究。在最近的研究之中,特定的卷积神经网络结构也可以达到很好的效果,比如Goolgle提出的用来做语音合成的wavenet,Facebook提出的用来做翻译的卷积神经网络。这就体现出经过特定设计的卷积神经网络在处理时间序列的任务上也具有巨大的发展潜力,本文就介绍一种特殊的卷积神经网络————时空卷积神经网络(Temporal convolutional network,TCN)。
TCN的表现:
所谓因果卷积网络是指,上一层t时刻的值只能依赖于下面那层t时刻以及t时刻之前的值,与传统的神经网络不同,TCN不能看见未来的数据,只有前面的因才有后面的果。
膨胀卷积是指卷积的Dilation的大小,也就是卷积的采样间隔大小,通过增加采样间隔的大小,使得网络在较少的层数下就可记住较多以前的信息,一般来说,越高的层使用的Dilation越大。
残差块最开始是用来处理由于神经网络层数过多而出现的网络效果退化的情况。残差神经网络被证明是训练深度网络较好的方法。如上图所示,一个残差块包含两层的卷积和非线性映射,在每层中还加入了WeightNorm和Dropout来正则化网络。
这个文件主要是做数据归一化操作的
import numpy as np from tensorflow.keras.datasets import mnist from tensorflow.keras.utils import to_categorical def data_generator(): # input image dimensions img_rows, img_cols = 28, 28 #导入手写数据集形状为(28,28) (x_train, y_train), (x_test, y_test) = mnist.load_data() #print("11111:**",y_train) #转化为(784,2) x_train = x_train.reshape(-1, img_rows * img_cols, 1) print("222222:",x_train.shape) x_test = x_test.reshape(-1, img_rows * img_cols, 1) #分类数量为0,1,2,3,4,5,6,7,8,9 num_classes = 10 #将标签值转化为one-hot编码 y_train = to_categorical(y_train, num_classes) print("yyyyyy",y_train.shape) y_test = to_categorical(y_test, num_classes) y_train = np.expand_dims(y_train, axis=2) print("zzzzzz", y_train.shape) y_test = np.expand_dims(y_test, axis=2) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 return (x_train, y_train), (x_test, y_test) if __name__ == '__main__': print(data_generator())
TCN网络的构建
#TCN网络 from tcn.tcn import TCN from utils import data_generator import tensorflow as tf from tensorflow.keras import layers,Input # 构建模型 (x_train, y_train), (x_test, y_test) = data_generator() #构建网络层级 inputs = layers.Input(shape=(x_train.shape[1], x_train.shape[2]), name='inputs') #神经元(卷积核)20个,卷积核大小6,膨胀大小为2的次方 t=TCN(return_sequences=False,nb_filters=20,kernel_size=6, dilations=[2 ** i for i in range(9)])(inputs) outputs=layers.Dense(10,activation="softmax")(t) tcn_model=tf.keras.Model(inputs,outputs) tcn_model.compile(optimizer="Adam", loss='sparse_categorical_crossentropy', metrics=['accuracy']) tcn_model.fit(x_train, y_train.squeeze().argmax(axis=1), epochs=100, validation_data=(x_test, y_test.squeeze().argmax(axis=1))) tcn_model.summary()
运行效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。