我正在尝试将计算输出与ny输出的图层更改为计算循环输出的图层,以便输出具有与输入相同的形状。例如,考虑以下
nt = 1000
nx_in = 8
ny = 2
x_train = np.array(shape=(nt, nx_in))
input = keras.Input(shape=(1, None, x_train.shape[1]), name='x_input')
output_ny = layers.Dense(ny)(x_input)
以上内容产生了预期的结果。现在,我想通过生成一个新的输出张量来创建一个递归层,该输出张量具有与输入张量相同的形状,并通过从张量output_ny中取一个值和(nx_in / ny-1)或3从张量中取值来创建输入
print('x_input.shape: ', x_input.shape)
print('ny_output.shape:', ny_output.shape)
print('max_lag: ', max_lag)
output_list = list()
ky_start = 0
max_lag = 5
stored_lags = max_lag - 1
for iy in range(ny):
ky_end = ky_start + stored_lags - 1
print('append output, {}:{}'.format(iy, iy+1))
output_list.append(ny_output[:, :, :, iy:(iy+1)])
print('append input, {}:{}'.format(ky_start, ky_end))
output_list.append(x_input[:, :, :, ky_start:ky_end])
ky_start = ky_end + 1
outputs = tf.unstack(output_list, axis=3)
打印的输出是
x_input.shape: (?, 1, ?, 8)
ny_output.shape: (?, 1, ?, 2)
max_lag: 5
append output, 0:1
append input, 0:3
append output, 1:2
append input, 4:7
这会产生以下错误消息
ValueError: Dimension 3 in both shapes must be equal, but are 1 and 3. Shapes are [?,1,?,1] and [?,1,?,3].
From merging shape 2 with other shapes. for 'packed' (op: 'Pack') with input shapes: [?,1,?,1], [?,1,?,3], [?,1,?,1], [?,1,?,3].
如何为每个ny生成一个与输入张量具有相同形状的新输出张量,并通过从张量output_ny附加一个元素和从张量输入附加3个元素来构建?
答案 0 :(得分:0)
Tensorflow“图”是计算的有向无环图。反向传播算法使该图向后移动,而预测则使它向前移动。
我的理解是,您正在尝试将周期引入图表。这是行不通的。
如果从神经网络的基本实现入手,则可以添加自己的循环单元格。
答案 1 :(得分:0)
要串联您的图层,可以使用keras.layers.Concatenate:
outputs = keras.layers.Concatenate(axis=3)(output_list)
因此,如果您打印输出形状,它将得到预期的结果:
> print(outputs.shape)
(?, 1, ?, 8)