不同形状的输入张量如何输入神经网络?

时间:2021-02-22 06:34:43

标签: tensorflow keras neural-network

我正在使用 Keras 在 Policy Gradient 上关注 this tutorial, 并不能完全弄清楚以下内容。

在下面的例子中,不同形状的输入张量究竟是如何输入模型的?
图层既没有.concated 也没有.Added。

  • input1.shape = (4, 4)
  • input2.shape = (4,)
  • “输入”层有 4 个神经元,接受 input1 + input2 作为 4d 向量??

代码摘录(已修改以使其更简单):

import tensorflow as tf
from tensorflow.keras import layers, models, optimizers
from tensorflow.keras import backend as K
import numpy as np

input = tf.keras.Input(shape=(4, ))
advantages = tf.keras.Input(shape=[1])
dense1 = layers.Dense(32, activation='relu')(input)
dense2 = layers.Dense(32, activation='relu')(dense1)
output = layers.Dense(2, activation='softmax')(dense2)

model = tf.keras.Model(inputs=[input, advantages], outputs=[output])

# *********************************
input1 = np.array(
[[ 4.52281174e-02,  4.31672811e-02, -4.57789579e-02,  4.35560472e-02],
 [ 4.60914630e-02, -1.51269339e-01, -4.49078369e-02,  3.21451106e-01],
 [ 4.30660763e-02,  4.44624011e-02, -3.84788148e-02,  1.49510297e-02],
 [ 4.39553243e-02, -1.50087194e-01, -3.81797942e-02,  2.95249428e-01]]
)

input2 = np.array(
[ 1.60063125,  1.47153674,  1.34113826,  1.20942261]
)


label = np.array(
[[1, 0],
 [0, 1],
 [1, 0],
 [0, 1]]
)

model.compile(optimizer=optimizers.Adam(lr=0.0005), loss="binary_crossentropy")
model.train_on_batch([input1, input2], label)

1 个答案:

答案 0 :(得分:1)

如果您可能想弄清楚刚刚构建的图形类型,使用 model.summary()tf.keras.utils.plot_model() 方法进行调试会很有帮助:

tf.keras.utils.plot_model(model, to_file="test.png", show_shapes=True, show_layer_names=True, show_dtype=True)

这将显示您的 input_2 确实没有被使用。由于您尚未通过任何操作将其连接到主图,因此它没有与之关联的权重(图运行但右侧没有任何可更新的内容):

enter image description here