深さの残留収縮ネットワークが実際に共通の特徴学習方法であり、ネットワークはResNet残留深さ、焦点および統合のソフトしきい値機構であり、それは、画像分類のために使用することができます。1.0 TFLearn 0.3.2、プログラムは、画像分類書き込まTensorFlowこの論文では、画像データとして使用されるCIFAR-10。CIFAR-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