深さは小さい工事の練習のtenssorflowごみを学んで分類して詳しく解説します。
5128 ワード
紹介する
これは深さ学習に基づくごみ分類小工程であり、深さ残差ネットワークで構築される。
ソフトウェアアーキテクチャは、深さ残差ネットワークreset 50を基礎として、異なる分類タスクに適応するために必要な層を追加する を使用する。モデルのトレーニングは、生成器でデータセットをメモリに循環的に書き込む必要があり、画像が拡張されて汎化モデル になる。ネットワーク出力部を含まないreset 50重みファイルを使って移動学習を行い、5つのstageの後に増加する層 だけを訓練する。
チュートリアルをインストールに必要な第三方倉庫は主にテナントflow 1.x,ケセラA,opencv,Pillow,scikit-learn,numpy があります。インストール方式は簡単で、terminalを開きます。例えば、pip install numpy-ihttps://pypi.tuna.tsinghua.edu.cn/simple データセットは、重み付けファイルと比較して大きいので、 をアップロードしていません。環境構成に問題がある場合、またはデータセットとモデル重みファイルが必要であれば、コメントエリアであなたの問題を説明できます。
使用説明 フォルダtheoryは、今回の深さ学習で得られたノートを記録し、モデルトレーニングのコンソールと情報を印刷します。 移動学習に必要な初期重みとモデル定義ファイルreset 50.pyをmodel に置く。でtrinNet.pyを実行する訓練を行い、訓練が終了するとmodelsフォルダを作成し、結果の重みgarcelass.h 5をこのフォルダ に書き込む。 datagenフォルダ下のgenit.pyは、画像前処理およびデータ生成器インターフェース のために使用される。訓練されたモデルを使ってゴミの分別を行い、Demo.py を実行します。
結果のプレゼンテーション
cans缶
コード解釈
実際のモデルでは、我々は5つのステージだけを使用して、後の出力部分は自分たちでカスタマイズする必要があります。ネットワークの構造図は以下の通りです。
stage 5以降のカスタムネットワークは以下の通りです。
"""
loss:0.7949-acc:0.9494-val_loss:0.9900-val_acc:0.8797
訓練は9時間ぐらいかかりました。
"""
もっといいグラフィックスカードを使えば、トレーニングが早くできます。
最後に
深さの学習がもたらした収穫を体験して、皆さんと勉強することができますように。もっと深い学習に関する資料を教えてください。他の関連記事に注目してください。
これは深さ学習に基づくごみ分類小工程であり、深さ残差ネットワークで構築される。
ソフトウェアアーキテクチャ
チュートリアルをインストール
使用説明
結果のプレゼンテーション
cans缶
コード解釈
実際のモデルでは、我々は5つのステージだけを使用して、後の出力部分は自分たちでカスタマイズする必要があります。ネットワークの構造図は以下の通りです。
stage 5以降のカスタムネットワークは以下の通りです。
""" resnet """
def custom(input_size,num_classes,pretrain):
# resnet50
base_model = ResNet50(weights=pretrain,
include_top=False,
pooling=None,
input_shape=(input_size,input_size, 3),
classes=num_classes)
# , ,
for layer in base_model.layers:
layer.trainable = False
#
x = base_model.output
x = layers.GlobalAveragePooling2D(name='avg_pool')(x)
x = layers.Dropout(0.5,name='dropout1')(x)
#regularizers ,
# , , , l2
x = layers.Dense(512,activation='relu',kernel_regularizer= regularizers.l2(0.0001),name='fc2')(x)
x = layers.BatchNormalization(name='bn_fc_01')(x)
x = layers.Dropout(0.5,name='dropout2')(x)
#40
x = layers.Dense(num_classes,activation='softmax')(x)
model = Model(inputs=base_model.input,outputs=x)
#
model.compile(optimizer="adam",loss = 'categorical_crossentropy',metrics=['accuracy'])
return model
ネットワークの訓練は移転学習プロセスであり、既存の初期のreset 50重み(5つのstageが訓練され、畳み込み層は特徴を抽出することができます)を使って、私たちは後の全連結層部分だけを訓練し、4つのepoch後に更に後の層をトレーニングして微調整して、より高い精度を得ます。トレーニングプロセスは以下の通りです。
class Net():
def __init__(self,img_size,gar_num,data_dir,batch_size,pretrain):
self.img_size=img_size
self.gar_num=gar_num
self.data_dir=data_dir
self.batch_size=batch_size
self.pretrain=pretrain
def build_train(self):
""" """
model = resnet.custom(self.img_size, self.gar_num, self.pretrain)
model.summary()
train_sequence, validation_sequence = genit.gendata(self.data_dir, self.batch_size, self.gar_num, self.img_size)
epochs=4
model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs,verbose=1,validation_data=validation_sequence,
max_queue_size=10,shuffle=True)
# , , , 181 , ,
layers=149
learning_rate=1e-4
for layer in model.layers[:layers]:
layer.trainable = False
for layer in model.layers[layers:]:
layer.trainable = True
Adam =adam(lr=learning_rate, decay=0.0005)
model.compile(optimizer=Adam, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(train_sequence,steps_per_epoch=len(train_sequence),epochs=epochs * 2,verbose=1,
callbacks=[
callbacks.ModelCheckpoint('./models/garclass.h5',monitor='val_loss', save_best_only=True, mode='min'),
callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1,patience=10, mode='min'),
callbacks.EarlyStopping(monitor='val_loss', patience=10),],
validation_data=validation_sequence,max_queue_size=10,shuffle=True)
print('finish train,look for garclass.h5')
訓練の結果は以下の通りです。"""
loss:0.7949-acc:0.9494-val_loss:0.9900-val_acc:0.8797
訓練は9時間ぐらいかかりました。
"""
もっといいグラフィックスカードを使えば、トレーニングが早くできます。
最後に
深さの学習がもたらした収穫を体験して、皆さんと勉強することができますように。もっと深い学習に関する資料を教えてください。他の関連記事に注目してください。