如何将输入与输出张量结合起来创建循环层?

How to combine input with output tensors to create a recurrent layer?

我正在尝试将使用 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].

如何生成一个新的输出张量,该张量与输入张量具有相同的形状,并且是通过从张量 output_ny 中附加一个元素和从张量输入中附加 3 个元素来构建的,对于每个 ny?

Tensorflow "graph" 是一种有向无环计算图。反向传播算法向后走这个图,而预测向前走。

我的理解是你试图在图中引入一个循环。这行不通。

如果您从神经网络的基本实现开始,您可以添加自己的循环单元。

要连接图层,您可以使用 keras.layers.Concatenate:

outputs = keras.layers.Concatenate(axis=3)(output_list)

因此,如果您打印输出形状,它会给出预期的结果:

> print(outputs.shape)
(?, 1, ?, 8)