https://pypi.org/project/keras-tcn/
pip install keras-tcn
中文:https://www.cnpython.com/pypi/keras-tcn
https://github.com/philipperemy/keras-tcn/tree/master/tasks
在大量任务上优于LSTM
并行性、灵活的接受 field 大小、稳定的梯度、训练时的低记忆要求、可变长度输入
TCN(
nb_filters=64,
kernel_size=2,
nb_stacks=1,
dilations=[1, 2, 4, 8, 16, 32],
padding=‘causal’,
use_skip_connections=True,
dropout_rate=0.0,
return_sequences=True,
activation=‘linear’,
kernel_initializer=‘he_normal’
, use_batch_norm=False, **kwargs)
在卷积层中使用的过滤器的数量,类似于LSTM。
整数,在每个卷积层中使用的内核kernel的大小。
列表。扩张的列表的一个例子是 : [1, 2, 4, 8, 16, 32, 64].
整数。要使用的剩余块的堆栈( stacks of residual blocks)数量。
String. The padding to use in the convolutions. ‘causal’ for a causal network (as in the original implementation) and ‘same’ for a non-causal network.
字符串。在卷积中使用的填充。
在因果网络中使用“因果”(如同最初的实现),而在非因果网络中使用“相同”。
Boolean. If we want to add skip connections from input to each residual block.
布尔。如果我们想要添加从输入到每个剩余块的跳过连接。
Boolean. Whether to return the last output in the output sequence, or the full sequence.
布尔。
是返回输出序列中的最后一个输出,还是返回完整序列。
Float between 0 and 1. Fraction of the input units to drop.
在0和1之间浮动。要下降的输入单位的分数。
The activation used in the residual blocks o = activation(x + F(x)).
剩余块中使用的激活o =激活(x + F(x))。
Initializer for the kernel weights matrix (Conv1D).
核权值矩阵(Conv1D)的初始化式。
Whether to use batch normalization in the residual layers or not.
是否在剩余层中使用批处理规范化。
Any other arguments for configuring parent class Layer. For example “name=str”, Name of the model. Use unique names when using multiple TCN.
用于配置父类层的任何其他参数。
例如"name=str",模型的名称。使用多个TCN时使用唯一名称。
三维张量形状(batch_size, timesteps, input_dim)。
具有形状的三维张量(批量大小、时间步长、输入维度)
如果每个序列都有不同的长度,这可能很有用:多个长度序列的例子。
shape (batch_size, timesteps, nb_filters).
如果return_sequences=true:具有形状的三维张量(批量大小、时间步长、nb_过滤器)
如果return_sequences=false:具有形状的2d张量(批量大小,nb_过滤器)
回归(多对一),例如添加问题
分类(多对多),例如复制内存任务
分类(多对一),例如顺序任务
对于多对多回归,目前一个廉价的解决方案是更改最终密集层的单元数。
from tensorflow.keras.layers import Dense
from tensorflow.keras import Input, Model
from tcn import TCN, tcn_full_summary
batch_size, timesteps, input_dim = None, 20, 1
def get_x_y(size=1000):
import numpy as np
pos_indices = np.random.choice(size, size=int(size // 2), replace=False)
x_train = np.zeros(shape=(size, timesteps, 1))
y_train = np.zeros(shape=(size, 1))
x_train[pos_indices, 0] = 1.0
y_train[pos_indices, 0] = 1.0
return x_train, y_train
仿佛它不用 sequential
#i是输入,读入之前设置的参数
i = Input(batch_shape=(batch_size, timesteps, input_dim))
#TCN层
o = TCN(return_sequences=False)(i) # The TCN layers are here.
#全连接层
o = Dense(1)(o)
#模型实例
m = Model(inputs=[i], outputs=[o])
在上面的例子中,tcn也可以像这样堆叠在一起
o = TCN(return_sequences=True)(i)
o = TCN(return_sequences=False)(o)
m.compile(optimizer='adam', loss='mse')
tcn_full_summary(m, expand_residual_blocks=False)
x, y = get_x_y()
m.fit(x, y, epochs=10, validation_split=0.2)
完整代码见 cf. tasks/
from tcn import compiled_tcn
model = compiled_tcn(...)
model.fit(x, y) # Keras model.