使用不同输入的 ResNet50 多次(共享权重)

Using ResNet50 multiples times with different inputs (weights shared)

我想多次使用相同的 ResNet50 和不同的输入,即共享权重。下面是我的代码,但我收到 resnet_x = resnet_x.output.

行的错误消息 AttributeError: 'Tensor' object has no attribute 'output'

我需要更改什么才能使其正常工作?

from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.layers import Input
from tensorflow.keras.layers import GlobalAveragePooling2D
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam

input_tensor_x = Input(shape=(96,96,3))
input_tensor_y = Input(shape=(96,96,3))
input_tensor_z = Input(shape=(96,96,3))

base_model = ResNet50(weights=None, include_top=False, input_shape=(96,96,3))
resnet_x = base_model(input_tensor_x)
resnet_x = resnet_x.output
resnet_x = GlobalAveragePooling2D()(resnet_x)
resnet_x = Dropout(0.5)(resnet_x)

resnet_y = base_model(input_tensor_y)
resnet_y = resnet_y.output
resnet_y = GlobalAveragePooling2D()(resnet_y)
resnet_y = Dropout(0.5)(resnet_y)

resnet_z = base_model(input_tensor_z)
resnet_y = resnet_y.output
resnet_y = GlobalAveragePooling2D()(resnet_y)
resnet_y = Dropout(0.5)(resnet_y)

merge_layer = tf.keras.layers.Concatenate()([resnet_x, resnet_y, resnet_z])

output_tensor = Dense(self.num_classes, activation='softmax')(merge_layer)

# instantiate and compile model
cnn_model = Model(inputs=[input_tensor_x, input_tensor_y, input_tensor_z], outputs=output_tensor)
opt = Adam()
cnn_model.compile(loss=categorical_crossentropy, optimizer=opt, metrics=['accuracy', tf.keras.metrics.AUC()])

只需删除 resnet_XXX = resnet_XXX.output 行即可。注意变量的名称(resnet_z层以下)

input_tensor_x = Input(shape=(96,96,3))
input_tensor_y = Input(shape=(96,96,3))
input_tensor_z = Input(shape=(96,96,3))

base_model = ResNet50(weights=None, include_top=False, input_shape=(96,96,3))
resnet_x = base_model(input_tensor_x)
resnet_x = GlobalAveragePooling2D()(resnet_x)
resnet_x = Dropout(0.5)(resnet_x)

resnet_y = base_model(input_tensor_y)
resnet_y = GlobalAveragePooling2D()(resnet_y)
resnet_y = Dropout(0.5)(resnet_y)

resnet_z = base_model(input_tensor_z)
resnet_z = GlobalAveragePooling2D()(resnet_z)
resnet_z = Dropout(0.5)(resnet_z)

merge_layer = tf.keras.layers.Concatenate()([resnet_x, resnet_y, resnet_z])

output_tensor = Dense(10, activation='softmax')(merge_layer)

# instantiate and compile model
cnn_model = Model(inputs=[input_tensor_x, input_tensor_y, input_tensor_z], outputs=output_tensor)
opt = Adam()
cnn_model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy', tf.keras.metrics.AUC()])