当您合并不同形状的喀拉拉邦分支时会发生什么?

时间:2019-10-05 03:07:41

标签: keras-2

以下为部分代码。我试图了解“添加”的作用。为什么在这里添加两个具有不同形状的输入时,添加层的输出(无,38、300)为何?

以下是Keras中的代码。

image_model = Input(shape=(2048,))
x = Dense(units=EMBEDDING_DIM, activation="relu")(image_model)
x = BatchNormalization()(x)

language_model = Input(shape=(MAX_CAPTION_SIZE,))
y = Embedding(input_dim=VOCABULARY_SIZE, output_dim=EMBEDDING_DIM)(language_model)
y = Dropout(0.5)(y)

merged = add([x, y])
merged = LSTM(256, return_sequences=False)(merged)
merged = Dense(units=VOCABULARY_SIZE)(merged)
merged = Activation("softmax")(merged)

enter image description here

1 个答案:

答案 0 :(得分:2)

  

为什么在添加两个输入时添加层的输出(无,38、300)   在这里有不同的形状?

这是一种称为广播的技术。您可以在这里找到更多详细信息:https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

在下面的示例中,第一输入(16,)沿第二输入(2,16)的第二维(2,)广播,因此可以进行逐元素加法。

import keras
import numpy as np

input1 = keras.layers.Input(shape=(16,))
input2 = keras.layers.Input(shape=(2,16))
added = keras.layers.Add()([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=added)
output = model.predict([np.ones((1,16)), np.ones((1,2,16))])
print(output.shape)
print(output)

(1、2、16)

[[[2。 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]   [2。 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2。]]]