残留収縮ネットワーク:( VIの深さ)を達成するためのコード

  深さの残留収縮ネットワークが実際に共通の特徴学習方法であり、ネットワークはResNet残留深さ、焦点および統合のソフトしきい値機構であり、それは、画像分類のために使用することができます。1.0 TFLearn 0.3.2、プログラムは、画像分類書き込まTensorFlowこの論文では、画像データとして使用されるCIFAR-10CIFAR-10は、画像10個のカテゴリを含む非常に一般的な画像データセットです。具体的な説明は、次のURLで確認することができます。https://www.cs.toronto.edu/~kriz/cifar.html

  ResNetコード(参照https://github.com/tflearn/tflearn/blob/master/examples/images/residual_network_cifar10.py)、残留収縮のネットワークコードの深さによって調製は以下の通りであります: 

 

#!は/ usr /ビン/ ENVのpython3 
# - * -コーディング:UTF-8を- * - 
""」
月12月23日21時23分09秒2019で作成された

M.趙、S.忠、X.フー、B.唐、M. Pecht、故障診断のための深い残留収縮ネットワーク、
産業情報、2019年にIEEEトランザクション、DOI:10.1109 / TII.2019.2943898 

@author:super_9527 
""」
 
__future__インポート分割、print_function、absolute_importから
 
インポートtflearnの
NPのようなインポートnumpyの
インポートTFとしてtensorflow 
tflearn.layers.convインポートからはconv_2d 
 
#データローディング
tflearn.datasetsインポートcifar10から
(X、Y)を、(testX、testY)= cifar10.load_data() 
 追加ノイズ 
(X = X + np.random.random (50000、32、32、3))* 0.1
testX = testX + np.random.random((10000、32、32、3))* 0.1 
 
#は、ワンホット形式にラベルを変換
(Y 10)Y = tflearn.data_utils.to_categorical 
testY = tflearn.data_utils.to_categorical( testY、10)
 
デフ到来(residual_shrinkage_block、nb_blocks、out_channels、ダウンサンプリング=偽、
                   downsample_strides = 2、活性化= 'relu'、batch_norm =真、
                   バイアス=真、weights_init = 'variance_scaling'、
                   bias_init = 'ゼロ'、正則=」 L2' 、weight_decay = 0.0001、
                   トレーニング可能= Trueの場合、復元=真、リユース= Falseを、範囲=なし、
                   名前= "ResidualBlock"):
     
    チャネルごとの閾値と#残留収縮ブロック
 
    残留=着信 
    in_channels = incoming.get_shape()。as_list() - [1] 
 
    古いTFのための#変数のスコープ修正
    試す:
        vscope = tf.variable_scope(範囲、DEFAULT_NAME =名前、値= [着信]、
                                   リユース=再使用)
    の例外を除い:
        vscope = tf.variable_op_scope([受信]、範囲、名前、リユース=再使用)
 
    範囲としてvscope有します。
        名前= scope.nameの#TODO 
 
        範囲のiについて(nb_blocks):
 
            アイデンティティ=残留
 
            ならないダウンサンプリング:
                downsample_strides = 1 
 
            batch_norm場合:
                残留= tflearn.batch_normalization(残留) 
            残留= tflearn.activation(残留、活性化)
            残留= conv_2d(残留、out_channels、3、
                             downsample_strides、 '同じ'、 '線形'、
                             バイアス、weights_init、bias_init、
                             正則、weight_decay、訓練可能な、
                             リストア)
 
            batch_norm場合:
                残留= tflearn.batch_normalization(残留)
            残留= tflearn.activation (残留、活性化)
            残留= conv_2d(残留、out_channels、3、1、 '同じ'、
                             '線形'、バイアス、weights_init、
                             bias_init、正則、weight_decay、
                             訓練可能な、リストア)
             
            #GETしきい値と適用閾値
            abs_mean = tf.reduce_mean(tf.reduce_mean(tf.abs(残留)、軸= 2、keep_dims = TRUE)、軸= 1、keep_dims = TRUE)
            尺度=(abs_mean、out_channels / tflearn.fully_connected / 4、活性化= 'リニア'、正則= 'L2'、weight_decay = 0.0001、weights_init = ')variance_scaling' 
            スケール= tflearn.batch_normalization(スケール)
            スケール= tflearn.activation(スケール、 'relu')
            スケール= tflearn.fully_connected (スケール、out_channels、活性化= 'リニア'、正則= 'L2'、weight_decay = 0.0001、weights_init = 'variance_scaling')
            スケール= tf.expand_dims(tf.expand_dims(スケール、軸= 1)、軸= 1)
            THRES = tf.multiply(abs_mean、tflearn.activations.sigmoid(スケール))
            #ソフトしきい値の 
            残留= tf.multiply (tf.sign(残留)、TF。最大(tf.abs(残留)-thres、0))
             
 
            ダウンサンプリング#
            場合downsample_strides> 1:
                アイデンティティ= tflearn.avg_pool_2d(アイデンティティ、1、
                                               downsample_strides)
 
            新しい次元へ#Projectionを
            !in_channels場合= out_channels:
                (out_channels - in_channels)の場合%2 == 0:
                    CH =(out_channels - in_channels)// 2 
                    アイデンティティ= tf.pad(アイデンティティ、
                                      [0,0]、[0,0]、[0,0]、[CH、CH])
                他:
                    CH =(out_channels - in_channels)// 2 
                    同一性= tf.pad(アイデンティティ、 
                                      [ 0,0]、[0,0]、[0,0]、[CH、CH + 1]]) 
                in_channels = out_channels 
 
            残留=残留+アイデンティティ
 
    戻り残留
 
 
#リアルタイムデータ前処理
img_prep = tflearn.ImagePreprocessing( )
img_prep.add_featurewise_zero_center(per_channel = TRUE) 
 リアルタイムデータ増強
img_aug = tflearn.ImageAugmentation()
img_aug.add_random_flip_leftright()
img_aug.add_random_crop([32、32]、パディング= 4) 
 ビルディープ残留収縮ネットワーク
ネット= tflearn .input_data(形状=なし、32、32、3]、
                         data_preprocessing = img_prep、
                         data_augmentation = img_aug) 
ネット= tflearn.conv_2d(ネット、16 、3、正則= 'L2'、weight_decay = 0.0001)
ネット= residual_shrinkage_block(ネット、1、16)
ネット= residual_shrinkage_block(ネット、1、32、ダウンサンプリング= TRUE)
ネット= residual_shrinkage_block(ネット、1、32、ダウンサンプリング= TRUE)
ネット= tflearn.batch_normalization(ネット)
ネット= tflearn.activation(ネット、 'relu')
ネット= tflearn.global_avg_pool(正味)
#回帰
tflearn.fully_connectedネット=(ネット、10、活性化= 'ソフトマックス')
お母さん= tflearn.Momentum(0.1、lr_decay = 0.1、decay_step = 20000、階段= TRUE)
ネット= tflearn.regression(ネット、オプティマイザ=お母さん、損失= 'categorical_crossentropy') トレーニング
モデル= tflearn.DNN(ネット、checkpoint_path = 'model_cifar10'、 
                    max_checkpoints = 10、tensorboard_verbose = 0、
                    clip_gradients = 0。)
 
model.fit(X、Y、n_epoch = 100、snapshot_epoch = Falseを、snapshot_step = 500、 
          show_metric =真、BATCH_SIZE = 100、シャッフル=真、RUN_ID = 'model_cifar10')
 
training_acc = model.evaluate(X、Y)[0] 
validation_acc = model.evaluate(testX、testY)[0]

 

  上記のコードは、3つの基本モジュールの唯一の残留収縮を含む、残留収縮ネットワークの小さな深さで構成され、他のパラメータはまた、超最適化されていません。高い正解率を追求するならば、トレーニングの反復回数、および適切な調整のスーパーパラメータを増やし、深さを増加することが適切ですることができます。

 

  五行前:

  残留収縮ネットワークの深さ:()背景  https://www.cnblogs.com/yc-9527/p/11598844.html

  残留収縮ネットワークの深さ:( B)全体的なアイデア  https://www.cnblogs.com/yc-9527/p/11601322.html

  残留収縮ネットワーク:( c)のネットワーク構造の深さ  https://www.cnblogs.com/yc-9527/p/11603320.html

  残留収縮ネットワークの深さ:( IV)注目のメカニズムの下で閾値セット  https://www.cnblogs.com/yc-9527/p/11604082.html

  残留収縮ネットワーク:( E)実験的検証の深さ  https://www.cnblogs.com/yc-9527/p/11610073.html

  オリジナルリンク:

  M.趙、S.忠、X.フー、B.タン、及びM. Pecht、「故障診断のための深い残留収縮ネットワーク、」産業情報、2019年にIEEEトランザクション、DOI:  10.1109 / TII.2019.2943898

  https://ieeexplore.ieee.org/document/8850096

おすすめ

転載: www.cnblogs.com/yc-9527/p/12091581.html