【问题标题】:Using ResNet50 multiples times with different inputs (weights shared)多次使用不同输入的 ResNet50(权重共享)
【发布时间】:2021-06-05 03:43:07
【问题描述】:

我想多次使用相同的 ResNet50 和不同的输入,即共享权重。下面是我的 coce,但我收到了 AttributeError: 'Tensor' object has no attribute 'output' 行的错误消息 resnet_x = resnet_x.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()])

【问题讨论】:

    标签: python tensorflow keras neural-network tf.keras


    【解决方案1】:

    只需删除行 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()])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多