如何结合输入和输出张量来创建一个递归层?

2024-06-13 08:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个计算有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)

以上产生了预期的结果。现在我想通过生成一个新的输出张量来创建一个递归层,这个输出张量与输入张量具有相同的形状,并通过从张量输出中取一个值和(nx\u 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].

如何生成一个新的输出张量,它与输入张量具有相同的形状,并通过在每个张量输出中添加一个元素和在张量输入中添加三个元素来构建?你知道吗


Tags: ininputoutputstartmaxlistlagend
2条回答

张量流“图”是一个有向无环的计算图。反向传播算法将此图向后移动,预测将其向前移动。你知道吗

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

如果你从一个基本的神经网络实现开始,你可以添加你自己的循环细胞。你知道吗

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

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

因此,如果打印输出形状,则会得到预期结果:

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

相关问题 更多 >