1

152 層の resnet を構築し、最後から 2 番目の非表示層の画像特徴を抽出する方法。

今、私は事前に訓練された ResNet 152 層モデルを取得しましたhttp://download.tensorflow.org/models/resnet_v1_152_2016_08_28.tar.gz この 152 層モデルを使用して画像の特徴を抽出したいだけです。最後から 2 番目の非表示レイヤーの画像機能 (コードに示されているとおり)。

  1. 主な質問は、152 層の ResNet モデルを構築する方法です。(セット n = 18 の場合、resnet は 110 レイヤーであることがわかります)。または、50 層の ResNet モデルを構築する方法は?
  2. 最後から 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