如何连接不同层的输出以作为 Tensorflow 中新层的输入?
How to concatenate different layer outputs to feed as input to a new layer in Tensorflow?
我是 Tensorflow 的新手,Python。我已经构建了一个多层网络并且已经对其进行了预训练。现在我想在第一个网络旁边构建另一个多层网络。第一个网络的权重被冻结,我想将从第一个网络获得的特征与新网络层的正常输入连接起来。如何将第一个网络中特定层的输出与该网络的输入连接起来并提供给新网络的层?
下面是连接 2 个不同输入形状的输入层并馈送到下一层的简单示例。
import tensorflow.keras.backend as K
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, concatenate, Conv2D, ZeroPadding2D, Dense
from tensorflow.keras.optimizers import Adagrad
input_img1 = Input(shape=(44,44,3))
x1 = Conv2D(3, (3, 3), activation='relu', padding='same')(input_img1)
input_img2 = Input(shape=(34,34,3))
x2 = Conv2D(3, (3, 3), activation='relu', padding='same')(input_img2)
# Zero Padding of 5 at the top, bottom, left and right side of an image tensor
x3 = ZeroPadding2D(padding = (5,5))(x2)
# Concatenate works as layers have same size output
x4 = concatenate([x1,x3])
output = Dense(18, activation='relu')(x4)
model = Model(inputs=[input_img1,input_img2], outputs=output)
model.summary()
输出 -
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_4 (InputLayer) [(None, 34, 34, 3)] 0
__________________________________________________________________________________________________
input_3 (InputLayer) [(None, 44, 44, 3)] 0
__________________________________________________________________________________________________
conv2d_3 (Conv2D) (None, 34, 34, 3) 84 input_4[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 44, 44, 3) 84 input_3[0][0]
__________________________________________________________________________________________________
zero_padding2d_1 (ZeroPadding2D (None, 44, 44, 3) 0 conv2d_3[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 44, 44, 6) 0 conv2d_2[0][0]
zero_padding2d_1[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 44, 44, 18) 126 concatenate_1[0][0]
==================================================================================================
Total params: 294
Trainable params: 294
Non-trainable params: 0
__________________________________________________________________________________________________
如果以上答案不是您要找的,那么请您分享模型的伪代码或流程图,以便更好地回答。
我是 Tensorflow 的新手,Python。我已经构建了一个多层网络并且已经对其进行了预训练。现在我想在第一个网络旁边构建另一个多层网络。第一个网络的权重被冻结,我想将从第一个网络获得的特征与新网络层的正常输入连接起来。如何将第一个网络中特定层的输出与该网络的输入连接起来并提供给新网络的层?
下面是连接 2 个不同输入形状的输入层并馈送到下一层的简单示例。
import tensorflow.keras.backend as K
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, concatenate, Conv2D, ZeroPadding2D, Dense
from tensorflow.keras.optimizers import Adagrad
input_img1 = Input(shape=(44,44,3))
x1 = Conv2D(3, (3, 3), activation='relu', padding='same')(input_img1)
input_img2 = Input(shape=(34,34,3))
x2 = Conv2D(3, (3, 3), activation='relu', padding='same')(input_img2)
# Zero Padding of 5 at the top, bottom, left and right side of an image tensor
x3 = ZeroPadding2D(padding = (5,5))(x2)
# Concatenate works as layers have same size output
x4 = concatenate([x1,x3])
output = Dense(18, activation='relu')(x4)
model = Model(inputs=[input_img1,input_img2], outputs=output)
model.summary()
输出 -
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_4 (InputLayer) [(None, 34, 34, 3)] 0
__________________________________________________________________________________________________
input_3 (InputLayer) [(None, 44, 44, 3)] 0
__________________________________________________________________________________________________
conv2d_3 (Conv2D) (None, 34, 34, 3) 84 input_4[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 44, 44, 3) 84 input_3[0][0]
__________________________________________________________________________________________________
zero_padding2d_1 (ZeroPadding2D (None, 44, 44, 3) 0 conv2d_3[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 44, 44, 6) 0 conv2d_2[0][0]
zero_padding2d_1[0][0]
__________________________________________________________________________________________________
dense (Dense) (None, 44, 44, 18) 126 concatenate_1[0][0]
==================================================================================================
Total params: 294
Trainable params: 294
Non-trainable params: 0
__________________________________________________________________________________________________
如果以上答案不是您要找的,那么请您分享模型的伪代码或流程图,以便更好地回答。