Keras:修改/重新排列输入层的元素以创建新的输入层,并馈送新的输入图层以创建新输出



假设我有一个Keras输入层"input_ layer_;(Python(

input_layer_A = tf.keras.layers.Input(shape=(10, ), name="input_A") # shape = (None, 10)

我还有一个致密层

dense_layer_1 = tf.keras.layers.Dense(units=1, activation='tanh', name="dense_layer_1")

然后我创建一个输出为:

out1 = dense_layer_1(input_layer_A)

我想修改/编辑";input_ layer_;(举个例子(如下:(关于如何正确编辑输入层的语法是问题的一部分(

input_layer_B = input_layer_A  #Copy the input_layer_A to create new input_layer_B
input_layer_B[0][5] = input_layer_B[0][4]  #Replace 5th element with its 4th element
input_layer_B[0][4] = out1  #Replace the 4th element with previous output out1

这是编辑/修改输入图层的正确方式吗?如果没有,正确的方法是什么?

然后,我将"input_layer_B"馈送到"dense_layer_1"以创建新的输出"out2"(一种递归,它也可以应用于for循环(

out2 = dense_layer_1(input_layer_B)

最后创建模型

model = Model(inputs=[input_layer_A], outputs = [out1, out2])

当我运行模型时,我得到了一个形式为的错误(与out2有关:这是图形断开的地方,out1没有问题,这意味着我如何修改"input_layer_B"有问题(

值错误:图形断开连接:无法获得张量的值

修改/编辑输入层的正确方式是什么,以便我仍然可以使用它成功地馈送到";dense_layer_ 1";最终得到一个连通且正确的图?

感谢任何帮助、建议或其他方法来完成我想要的。

谢谢

PS:我构建这样一个递归网络的动机是用反馈对NARX神经网络进行建模,以估计动态系统的多步超前输出。因此理论上可以有n个输出

试试这个代码:

import tensorflow as tf
input_layer_A = tf.keras.layers.Input(shape=(10, ), name="input_A") # shape = (None, 10)
dense_layer_1 = tf.keras.layers.Dense(units=1, activation='tanh', name="dense_layer_1")
out1 = dense_layer_1(input_layer_A)
out2 = tf.concat([input_layer_A[:, :4], out1, input_layer_A[:, 4][..., tf.newaxis], input_layer_A[:, 6:]], -1)
out2 = dense_layer_1(out2)
model = tf.keras.Model(inputs=[input_layer_A], outputs = [out1, out2])
inp = tf.random.uniform((1, 10))
pred = model(inp)

注意,我已经改变了密集层的尺寸(应该是1,以获得以下可能的操作(:

input_layer_B[0][4] = out1

最新更新