Базовая структура ТКС
Временная сверточная сеть (TCN) была предложена Шаоцзе Бай и др. в 2018 г. и может использоваться для обработки данных временных рядов.бумага.
1. Причинная свертка
Причинная свертка показана на рисунке выше. Для значения предыдущего слоя в момент времени t оно зависит только от следующего слоя в момент времени t и его предыдущего значения. Отличие от традиционных сверточных нейронных сетей в том, что каузальная свертка не может видеть будущие данные, это односторонняя структура, а не двусторонняя. Иными словами, существует антецедент до того, как может быть последствие Это строго ограниченная по времени модель, поэтому она называется причинно-следственной сверткой.
2. Расширенная свертка
Расширенная свертка также известна как расширенная свертка.
Чистая каузальная свертка по-прежнему страдает от проблемы традиционных сверточных нейронных сетей, то есть продолжительность времени моделирования ограничена размером ядра свертки. Если вы хотите получить более длинные зависимости, вам нужно складывать много слоев линейно. Для решения этой проблемы исследователи предлагают расширенные извилины, как показано на рисунке ниже.
В отличие от традиционных сверток расширенные свертки позволяют производить выборку входных данных с интервалами во время свертки, а частота выборки определяетсяконтроль. базаУказывает, что во время процесса ввода производится выборка каждой точки, а промежуточный слойУказывает, что каждые 2 точки выбираются в качестве входных данных во время процесса ввода. Как правило, чем выше уровень, тем больше значение d. Таким образом, расширенные свертки заставляют эффективный размер окна экспоненциально расти с количеством слоев. Таким образом, сверточная сеть может использовать меньше слоев и получить большое восприимчивое поле.
3. Остаточные соединения
Остаточные соединения оказались эффективным методом обучения глубоких сетей, позволяя сети передавать информацию межуровневым образом.
В статье строится остаточный блок, заменяющий сверточный слой. Как показано на рисунке выше, остаточный блок содержит два слоя свертки и нелинейного отображения и добавляет к каждому слою WeightNorm и Dropout для упорядочения сети.
TCNСводка
преимущество
(1) Параллелизм. Получив предложение, TCN может обрабатывать предложение параллельно без необходимости последовательной обработки, такой как RNN.
(2) Гибкое рецептивное поле. Размер рецептивного поля ТХН определяется количеством слоев, размером ядра свертки и коэффициентом расширения. Его можно гибко настроить в соответствии с различными характеристиками различных задач.
(3) Градиент стабилен. RNN часто страдают от исчезающих градиентов и взрывных градиентов, которые в основном вызваны общими параметрами в разные периоды времени. Как и традиционные сверточные нейронные сети, TCN не страдают от исчезновения и взрыва градиентов.
(4) Память ниже. RNN необходимо сохранять информацию о каждом шаге, когда он используется, что занимает много памяти Ядро свертки TCN совместно используется на одном уровне, а использование памяти ниже.
недостаток
(1) TCN может быть не столь адаптируемым в трансферном обучении. Это связано с тем, что объем исторической информации, необходимой для предсказания модели, может различаться в разных областях. Следовательно, при переносе модели из задачи, требующей меньшего количества информации о памяти, в задачу, требующую большей памяти, TCN может работать плохо, поскольку его рецептивное поле недостаточно велико.
(2) TCN, описанная в статье, по-прежнему является однонаправленной структурой. В таких задачах, как распознавание и синтез речи, чисто однонаправленные структуры по-прежнему очень полезны. Однако в большинстве текстов используются двунаправленные структуры. TCN можно легко расширить до двунаправленной структуры, просто заменив причинно-следственную свертку традиционной сверточной структурой.
(3) В конце концов, TCN — это вариант сверточной нейронной сети. Хотя использование расширенных извилин может расширить рецептивное поле, оно все же ограничено. По сравнению с Transformer функция, позволяющая получить релевантную информацию любой длины, по-прежнему оставляет желать лучшего. Применение TCN к тексту еще предстоит проверить.
приложение для третьих лиц
Классификация рукописных цифр MINST
Несколько признаков соответствуют метке, т.е. (x
i1,xi2,xi3,...xin)-уi
Местная среда:
Python 3.6
IDE:Pycharm
Версия библиотеки:
keras 2.2.0
numpy 1.16.2
tensorflow 1.9.0
1. Загрузите набор данных
2. Создайте TCN.py и введите следующий код
Ссылка на код:Keras-based TCN
# TCN for minst data
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Model
from keras.layers import add, Input, Conv1D, Activation, Flatten, Dense
# Load data 载入数据
def read_data(path):
mnist = input_data.read_data_sets(path, one_hot=True)
train_x, train_y = mnist.train.images.reshape(-1, 28, 28), mnist.train.labels,
valid_x, valid_y = mnist.validation.images.reshape(-1, 28, 28), mnist.validation.labels,
test_x, test_y = mnist.test.images.reshape(-1, 28, 28), mnist.test.labels
return train_x, train_y, valid_x, valid_y, test_x, test_y
# Residual block 残差块
def ResBlock(x, filters, kernel_size, dilation_rate):
r = Conv1D(filters, kernel_size, padding='same', dilation_rate=dilation_rate, activation='relu')(
x) # first convolution
r = Conv1D(filters, kernel_size, padding='same', dilation_rate=dilation_rate)(r) # Second convolution
if x.shape[-1] == filters:
shortcut = x
else:
shortcut = Conv1D(filters, kernel_size, padding='same')(x) # shortcut (shortcut)
o = add([r, shortcut])
# Activation function
o = Activation('relu')(o)
return o
# Sequence Model 时序模型
def TCN(train_x, train_y, valid_x, valid_y, test_x, test_y, classes, epoch):
inputs = Input(shape=(28, 28))
x = ResBlock(inputs, filters=32, kernel_size=3, dilation_rate=1)
x = ResBlock(x, filters=32, kernel_size=3, dilation_rate=2)
x = ResBlock(x, filters=16, kernel_size=3, dilation_rate=4)
x = Flatten()(x)
x = Dense(classes, activation='softmax')(x)
model = Model(input=inputs, output=x)
# View network structure 查看网络结构
model.summary()
# Compile model 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Training model 训练模型
model.fit(train_x, train_y, batch_size=500, nb_epoch=epoch, verbose=2, validation_data=(valid_x, valid_y))
# Assessment model 评估模型
pre = model.evaluate(test_x, test_y, batch_size=500, verbose=2)
print('test_loss:', pre[0], '- test_acc:', pre[1])
# MINST数字从0-9共10个,即10个类别
classes = 10
epoch = 30
train_x, train_y, valid_x, valid_y, test_x, test_y = read_data('MNIST_data')
#print(train_x, train_y)
TCN(train_x, train_y, valid_x, valid_y, test_x, test_y, classes, epoch)
3. Результаты
test_loss: 0.05342669463425409 - test_acc: 0.987100002169609
несколько ярлыков
Несколько объектов соответствуют нескольким меткам, например (xi1,xi2,xi3,...xin)-(уi1,имеютi2)
Просто внесите изменения в соответствии с приведенным выше кодом, перестройте обучающие и тестовые данные и установите соответствующие входные и выходные размеры, параметры и другую информацию.
Местная среда:
Python 3.6
IDE:Pycharm
Версия библиотеки:
keras 2.2.0
numpy 1.16.2
pandas 0.24.1
sklearn 0.20.1
tensorflow 1.9.0
Конкретный код:
# TCN for indoor location
import math
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Model
from keras.layers import add, Input, Conv1D, Activation, Flatten, Dense
import numpy as np
import pandas
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
# 创建时序数据
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), :]
dataX.append(a)
dataY.append(dataset[i + look_back, -2:])
return np.array(dataX), np.array(dataY)
# Residual block
def ResBlock(x, filters, kernel_size, dilation_rate):
r = Conv1D(filters, kernel_size, padding='same', dilation_rate=dilation_rate, activation='relu')(
x) # first convolution
r = Conv1D(filters, kernel_size, padding='same', dilation_rate=dilation_rate)(r) # Second convolution
if x.shape[-1] == filters:
shortcut = x
else:
shortcut = Conv1D(filters, kernel_size, padding='same')(x) # shortcut (shortcut)
o = add([r, shortcut])
o = Activation('relu')(o) # Activation function
return o
# Sequence Model
def TCN(train_x, train_y, test_x, test_y, look_back, n_features, n_output, epoch):
inputs = Input(shape=(look_back, n_features))
x = ResBlock(inputs, filters=32, kernel_size=3, dilation_rate=1)
x = ResBlock(x, filters=32, kernel_size=3, dilation_rate=2)
x = ResBlock(x, filters=16, kernel_size=3, dilation_rate=4)
x = Flatten()(x)
x = Dense(n_output, activation='softmax')(x)
model = Model(input=inputs, output=x)
# View network structure
model.summary()
# Compile model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Training model
model.fit(train_x, train_y, batch_size=500, nb_epoch=epoch, verbose=2)
# Assessment model
pre = model.evaluate(test_x, test_y, batch_size=500, verbose=2)
# print(pre)
print('test_loss:', pre[0], '- test_acc:', pre[1])
# 公共参数
np.random.seed(7)
features = 24
output = 2
EPOCH = 30
look_back = 5
trainPath = '../data/train.csv'
testPath = '../data/test.csv'
trainData = pandas.read_csv(trainPath, engine='python')
testData = pandas.read_csv(testPath, engine='python')
# features = 1
dataset = trainData.values
dataset = dataset.astype('float32')
datatestset = testData.values
datatestset = datatestset.astype('float32')
# print(dataset)
# normalize the dataset
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
datatestset = scaler.fit_transform(datatestset)
trainX, trainY = create_dataset(dataset, look_back)
testX, testY = create_dataset(datatestset, look_back)
# print(trainX)
print(len(trainX), len(testX))
print(testX.shape)
# reshape input to be [samples, time steps, features]
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], features))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], features))
# train_x, train_y, valid_x, valid_y, test_x, test_y = read_data('MNIST_data')
print(trainX, trainY)
TCN(trainX, trainY, testX, testY, look_back, features, output, EPOCH)
Продолжение следует...
использованная литература
An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
TCN-Time Convolutional Network