1

如何构建 152 层的 resnet 并提取倒数第​​二个隐藏层的图像特征。

现在我得到了一个预训练的 ResNet 152 层模型http://download.tensorflow.org/models/resnet_v1_152_2016_08_28.tar.gz 我只是想用这个 152 层模型来提取图像特征,现在我想提取倒数第二个隐藏层的图像特征(正如代码中所示)。

  1. 主要问题是如何构建 152 层的 ResNet 模型?(我只看到设置 n = 18 然后 resnet 是 110 层。)。或者如何构建 50 层的 ResNet 模型?
  2. 我提取倒数第​​二个隐藏层的图像特征码对吗?

    from __future__ import division, print_function, absolute_import
    
    import tflearn
    from PIL import Image
    import numpy as np
    
    # Residual blocks
    # 32 layers: n=5, 56 layers: n=9, 110 layers: n=18
    n = 18
    
    # Data loading
    from tflearn.datasets import cifar10
    (X, Y), (testX, testY) = cifar10.load_data()
    Y = tflearn.data_utils.to_categorical(Y, 10)
    testY = tflearn.data_utils.to_categorical(testY, 10)
    
    # Real-time data preprocessing
    img_prep = tflearn.ImagePreprocessing()
    img_prep.add_featurewise_zero_center(per_channel=True)
    
    # Real-time data augmentation
    img_aug = tflearn.ImageAugmentation()
    img_aug.add_random_flip_leftright()
    img_aug.add_random_crop([32, 32], padding=4)
    
    # Building Residual Network
    net = tflearn.input_data(shape=[None, 32, 32, 3],
                         data_preprocessing=img_prep,
                         data_augmentation=img_aug)
    net = tflearn.conv_2d(net, 16, 3, regularizer='L2', weight_decay=0.0001)
    net = tflearn.residual_block(net, n, 16)
    net = tflearn.residual_block(net, 1, 32, downsample=True)
    net = tflearn.residual_block(net, n-1, 32)
    net = tflearn.residual_block(net, 1, 64, downsample=True)
    net = tflearn.residual_block(net, n-1, 64)
    net = tflearn.residual_block(net, 1, 64, downsample=True)
    net = tflearn.residual_block(net, n-1, 64)
    
    net = tflearn.batch_normalization(net)
    net = tflearn.activation(net, 'relu')
    output_layer = tflearn.global_avg_pool(net)
    
    # Regression
    net = tflearn.fully_connected(output_layer, 10, activation='softmax')
    mom = tflearn.Momentum(0.1, lr_decay=0.1, decay_step=32000, staircase=True)
    net = tflearn.regression(net, optimizer=mom,
                         loss='categorical_crossentropy')
    # Training
    model = tflearn.DNN(net, checkpoint_path='resnet_v1_152.ckpt',
                    max_checkpoints=10, tensorboard_verbose=0,
                    clip_gradients=0.)
    
    model.fit(X, Y, n_epoch=200, validation_set=(testX, testY),
          snapshot_epoch=False, snapshot_step=500,
          show_metric=True, batch_size=128, shuffle=True,
          run_id='resnet_cifar10')
    model.save('./resnet_v1_152.ckpt')
    
    
    #---------------
    # now extract the penultimate hidden layer's image feature
    img = Image.open(file_path)
    img = img.resize((32, 32), Image.ANTIALIAS)
    img = np.asarray(img, dtype="float32")
    imgs = np.asarray([img])
    model_test = tflearn.DNN(output_layer, session = model.session)
    model_test.load('resnet_v1_152.ckpt', weights_only = True)
    
    predict_y = model_test.predict(imgs)
    
    print('layer\'s feature'.format(predict_y))
    
4

0 回答 0