Python 基于Tensorflow 2.0的扩展因果卷积时间序列预测
我的任务是使用Tensorflow 2.0.0和Python 3.6,根据之前的200个时间步(类似于WaveNet)预测下一个timeseries值。 我的训练数据的形状不匹配。我收到以下错误消息: ValueError:当使用as lossPython 基于Tensorflow 2.0的扩展因果卷积时间序列预测,python,tensorflow,shapes,Python,Tensorflow,Shapes,我的任务是使用Tensorflow 2.0.0和Python 3.6,根据之前的200个时间步(类似于WaveNet)预测下一个timeseries值。 我的训练数据的形状不匹配。我收到以下错误消息: ValueError:当使用as loss均方误差时,传递了形状为(495,1,1)的目标数组作为形状输出(None,200,1)。此损失期望目标与输出具有相同的形状 我的代码: import tensorflow as tf import tensorflow.keras as k import
均方误差时,传递了形状为(495,1,1)的目标数组作为形状输出(None,200,1)。此损失期望目标与输出具有相同的形状
我的代码:
import tensorflow as tf
import tensorflow.keras as k
import numpy as np
batch_size = 495
epochs = 5
learning_rate = 0.001
dilations = 7
seq_length=200
class TCNBlock(k.Model):
def __init__(self, dilation, seq_length):
super(TCNBlock, self).__init__()
self.seq_length = seq_length
self.convolution0 = k.layers.Conv1D(8, kernel_size=4, strides=1, padding='causal', dilation_rate=dilation)
self.BatchNorm0 = k.layers.BatchNormalization(momentum=0.6)
self.relu0 = k.layers.ReLU()
self.dropout0 = k.layers.Dropout(rate=0.2)
self.convolution1 = k.layers.Conv1D(8, kernel_size=4, strides=1, padding='causal', dilation_rate=dilation)
self.BatchNorm1 = k.layers.BatchNormalization(momentum=0.6)
self.relu1 = k.layers.ReLU()
self.dropout1 = k.layers.Dropout(rate=0.2)
self.residual = k.layers.Conv1D(1, kernel_size=1, padding='same')
def build_block(self, dilation, training=False):
inputs = k.Input(shape=(200, 1))
output_layer1 = self.convolution0(inputs)
output_layer2 = self.BatchNorm0(output_layer1)
output_layer3 = self.relu0(output_layer2)
output_layer4 = self.dropout0(output_layer3, training)
output_layer5 = self.convolution1(output_layer4)
output_layer6 = self.BatchNorm1(output_layer5)
output_layer7 = self.relu1(output_layer6)
output = self.dropout1(output_layer7, training)
residual = self.residual(output)
outputs = k.layers.add([inputs, residual])
return k.models.Model(inputs=inputs, outputs=outputs)
def build_model():
mdl = k.models.Sequential()
for dilation in range(dilations):
dilation_actual = int(np.power(2, dilation))
block = TCNBlock(dilation_actual, seq_length).build_block(dilation_actual)
mdl.add(block)
return mdl
Model_complete = build_model()
opt = k.optimizers.Adam(learning_rate=learning_rate)
Model_complete.compile(loss='mean_squared_error', optimizer=opt, metrics=["accuracy"])
# Train Model
training_process = Model_complete.fit(x_train, y_train, epochs=epochs, verbose=1, batch_size=495, validation_split=0.1)
我的数据具有以下形状:
x_train.shape = (495, 200, 1)
y_train.shape = (495, 1, 1)
如果有任何帮助和建议,我将不胜感激。
谢谢大家! 时间序列分析预测的重要步骤是准备数据,以便模型进行相应的预测
执行该重要步骤的功能
如下所示:
def multivariate_data(dataset, target, start_index, end_index, history_size,
target_size, step, single_step=False):
data = []
labels = []
start_index = start_index + history_size
if end_index is None:
end_index = len(dataset) - target_size
for i in range(start_index, end_index):
indices = range(i-history_size, i, step)
data.append(dataset[indices])
if single_step:
labels.append(target[i+target_size])
else:
labels.append(target[i:i+target_size])
return np.array(data), np.array(labels)
需要解释的上述函数的重要参数是history\u size
和target\u size
在您的情况下,history\u size
将为200,target\u size
将为1
我有一个真诚的建议给你(请不要冒犯,我的意图是真诚地帮助你)。由于您对Tensorflow
相对较新,我要求您仔细阅读Tensorflow网站中给出的使用LSTM
实现的示例,完全理解它,然后尝试使用扩展卷积来实现它
希望这有帮助。学习愉快 seq_length
缺失,因此我无法运行您的示例seq_length为200。我现在在代码中添加了它您的网络的输出层是shape(None,200,1)
,但您希望最后一层是(None,1,1)
。我想您在这里有一些困惑。一般形状为(批次、尺寸、过滤器)
。如果使用1个过滤器进行卷积,结果是(批次,维度,1)
,而不是(批次,1,1)
。我更愿意说,您必须以这样一种方式重新构造模型:输出层的形状为(批次,1,1),您可以在标签上进行训练