Machine learning 获取运行时错误:图形已断开连接:无法获取张量的值

Machine learning 获取运行时错误:图形已断开连接:无法获取张量的值,machine-learning,resnet,pre-trained-model,imagenet,Machine Learning,Resnet,Pre Trained Model,Imagenet,我想通过检索ResNet101的一个名为“avg_pool”的层并将其转换为我的自定义层来创建ResNet101的自定义模型。我做过类似的事情,另一个预先训练过的Imagnet模型名为resnet50,但在Resnet101中出现了一个错误。我是迁移学习的新手,请指出我的错误 def resnet101_model(weights_path=None): eps = 1.1e-5 # Handle Dimension Ordering for different backend

我想通过检索ResNet101的一个名为“avg_pool”的层并将其转换为我的自定义层来创建ResNet101的自定义模型。我做过类似的事情,另一个预先训练过的Imagnet模型名为resnet50,但在Resnet101中出现了一个错误。我是迁移学习的新手,请指出我的错误

def resnet101_model(weights_path=None):
    eps = 1.1e-5

    # Handle Dimension Ordering for different backends
    global bn_axis
    if K.image_dim_ordering() == 'tf':
        bn_axis = 3
        img_input = Input(shape=(224, 224, 3), name='data')
    else:
        bn_axis = 1
        img_input = Input(shape=(3, 224, 224), name='data')

    x = ZeroPadding2D((3, 3), name='conv1_zeropadding')(img_input)
    x = Convolution2D(64, 7, 7, subsample=(2, 2), name='conv1', bias=False)(x)
    x = BatchNormalization(epsilon=eps, axis=bn_axis, name='bn_conv1')(x)
    x = Scale(axis=bn_axis, name='scale_conv1')(x)
    x = Activation('relu', name='conv1_relu')(x)
    x = MaxPooling2D((3, 3), strides=(2, 2), name='pool1')(x)

    x = conv_block(x, 3, [64, 64, 256], stage=2, block='a', strides=(1, 1))
    x = identity_block(x, 3, [64, 64, 256], stage=2, block='b')
    x = identity_block(x, 3, [64, 64, 256], stage=2, block='c')

    x = conv_block(x, 3, [128, 128, 512], stage=3, block='a')
    for i in range(1,3):
        x = identity_block(x, 3, [128, 128, 512], stage=3, block='b'+str(i))

    x = conv_block(x, 3, [256, 256, 1024], stage=4, block='a')
    for i in range(1,23):
        x = identity_block(x, 3, [256, 256, 1024], stage=4, block='b'+str(i))

    x = conv_block(x, 3, [512, 512, 2048], stage=5, block='a')
    x = identity_block(x, 3, [512, 512, 2048], stage=5, block='b')
    x = identity_block(x, 3, [512, 512, 2048], stage=5, block='c')

    x_fc = AveragePooling2D((7, 7), name='avg_pool')(x)
    x_fc = Flatten()(x_fc)
    x_fc = Dense(1000, activation='softmax', name='fc1000')(x_fc)

    model = Model(img_input, x_fc)

    # load weights
    if weights_path:
        model.load_weights(weights_path, by_name=True)

    return model

im = cv2.resize(cv2.imread('human.jpg'), (224, 224)).astype(np.float32)
# Remove train image mean
im[:,:,0] -= 103.939
im[:,:,1] -= 116.779
im[:,:,2] -= 123.68

# Transpose image dimensions (Theano uses the channels as the 1st dimension)
if K.image_dim_ordering() == 'th':
    im = im.transpose((2,0,1))
    weights_path = 'resnet101_weights_th.h5'
else:
    weights_path = 'resnet101_weights_tf.h5'

im = np.expand_dims(im, axis=0)

image_input = Input(shape=(224, 224, 3))

model = resnet101_model(weights_path)
model.summary()

last_layer = model.get_layer('avg_pool').output
x = Flatten(name='flatten')(last_layer)
out = Dense(num_classes, activation='softmax', name='fc1000')(x)

custom_resnet_model = Model(inputs=image_input,outputs= out)
custom_resnet_model.summary()

当您的输入和输出未连接时,会发生图形断开。在您的情况下,
图像\u输入
未连接到
输出
。您应该通过Resnet模型传递它,然后它就可以工作了