当您在 keras 中合并不同形状的分支时会发生什么?
what happens when you merge branches in keras with different shapes?
以下是部分代码。我试图了解 "add" 的作用。为什么Add layer (None, 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)
Why is the output of Add layer (None, 38, 300) when adding two inputs
with different shapes here?
这是一种称为广播的技术。您可以在此处找到更多详细信息: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.]]]
以下是部分代码。我试图了解 "add" 的作用。为什么Add layer (None, 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)
Why is the output of Add layer (None, 38, 300) when adding two inputs with different shapes here?
这是一种称为广播的技术。您可以在此处找到更多详细信息: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.]]]