简体   繁体   English

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

[英]Using ResNet50 multiples times with different inputs (weights shared)

I would like to use the same ResNet50 multiple times with different inputs, ie weights shared.我想多次使用相同的 ResNet50 和不同的输入,即共享权重。 Below is my coce but I'm getting the error message AttributeError: 'Tensor' object has no attribute 'output' for the line resnet_x = resnet_x.output .下面是我的 coce,但我收到错误消息AttributeError: 'Tensor' object has no attribute 'output' for the line resnet_x = resnet_x.output

What do I have to change to make it work?我必须改变什么才能让它工作?

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()])

simply removing the lines resnet_XXX = resnet_XXX.output does the job.只需删除行resnet_XXX = resnet_XXX.output完成工作。 pay attention to the name of the variables (below resnet_z layer)注意变量的名称(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()])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM