mxnetはデータを処理してから訓練を始めます.
13651 ワード
caffe依存性が多すぎて、構成が複雑です.
mxnetの長所は明らかで、簡潔で、効率的で、多機多カードのサポートが良いです.
mxnetのgithubダウンロードリンク:https://github.com/dmlc/mxnet/
mxnetの開発文書リンク:http://mxnet.readthedocs.org/en/latest/build.html
開発された文書は分かりやすく、インストール、文法、例などが含まれています.
1-トレーニング画像をフォーマットに変換し、ネットワークに送る方法
caffeでモデルをトレーニングする前に、トレーニング画像をleveldbまたはLMBB形式のデータに変換するように、mxnetは訓練前に画像をREC形式のデータに変換します.
ここでは、変換プロセスを直接記録し、RECデータフォーマットのコードと最終的にどのようにRECフォーマットデータをネットワークに再ロードするかを詳細に説明します.
Linuxの下で変換するためのツールはmxnet/binの下で「im 2 rec」という実行可能ファイルです.ファイルのソースはmxnet/tools/m 2 rec.cを確認できます.
まず、以下のim 2 recの変換ツールにはどのような入力パラメータがあるかを説明する.
まず入力しなければならない3つのパラメータです.順番は 1 (1)まず写真とラベル情報を保存するテキストです.ここで私のファイルはtrain.txtです. 1 , (2)パラメータの運転と調整を容易にするために、ここにはWindowsバッチ処理コマンドのような実行可能ファイルを書いて、im 2 recを呼び出します.ここで私の実行可能ファイル名はconvert.shで、トレーニング画像はdataフォルダに格納されています.変換後の結果は現在のフォルダに保存され、trin.recと名付けられました. 1 , 4 5 ディケンサ-変換後のデータをネットワークに送る:
全体として、トレーニングを開始するには、3つの部分が必要である.トレーニングパラメータ、ネットワークモデル、トレーニングデータ.前のセクションでは、どのように元の画像データをmxnetに変換することができますか?RECフォーマットのデータを紹介しました.しかし、実際に訓練する時、RECデータを私達のトレーニングネットワークに送るツールが必要です.このツールは「ディエゼル」です.
mxnetは、私たちのために、迅速にサブジェネレータを構築するための関数ImagerecordIterを提供しています.この関数はpython/mxnet/io.pyに位置しています.または、pythonコマンドウィンドウに以下のコマンドを入力して、io関数の位置および説明を取得することができます. 1 次に、ImageRecordIterのいくつかの一般的なパラメータについて説明します. 1 , 4 5 , , 8 9, 10 11 15 , , , 1 次に、この例がexample/image-classication/trin_にある場合の例を例に挙げて説明する.イメージnet.py中 1 , 4 5 , , 8 9, 10 11 15 , , , 一つのネットワークモデルはコネクタの層が一つですので、ネットワークモデルを構築したいです.まずmxnetにはどのような層がありますか?(以下は使用頻度によって並べ替えます.)一般的な層を紹介します.より多くの層はpythonコマンドウィンドウで以下のコードを実行して調べられます. 1 2ネットワークモデルを構築する
(1)Activation:アクティブ関数 1 , (3)Deconvolution:反巻積層 1 (4)Dropout: 1 (5)Flatten:N次元データを1次元にする 1 (6)FulyConneced:全連結層 1 , (7)LRN: 1 , (8)Pooling 1 , (9)SoftmaxOutput:loglossを使ってBPを行う 1 , (10)Varable:smbol型変数を定義する 1 mxnet/example/image-classicationフォルダの下でsmbolで始まるいくつか.pyファイルは定義されたネットワークモデルです.私たちは任意に一つを開けて、具体的にネットワークを構築する方法を知ることができます.一つの注意が必要なのは、mxnetでは一般的に畳み込み層と全連結層の間の価格にFlatten層を入れて接続に使います.
3-トレーニング開始
まず、私たちは今何を持っていますか?ネットワークモデルを保存したpyファイル、RECフォーマットのトレーニングデータ、データをネットワークのローズマリーに送ります.この基礎の上で、私達の足りないのはネットの訓練のいくつかの制御のパラメーターだけが残ります.例えば、学習率、訓練の日誌、GPUの選択など.初期には、細かいことは気にしないで早く使ってもいいです.それなら、一番簡単な方法はカバーmxnetの例を直接修正することです.例は主に/example/image-classicationと/tests/pythonに集中しています.簡単なトレーニング方法を紹介します.(1)ファイルを新規作成して、ファイルの下でファイルを作成します.mxnet.py、smbol_alexnet.py、train_imagnet.pyとtrain_model.pyの4つのファイルのcopyが入ります.(2)find_を保つmxnet.pyファイルはそのままで、smbol_alexnet.pyでは、Alexnetネットワークの構築方法に従って、自分のネットワークを構築します.最后に、ファイル名を自分のネット名に変えたほうがいいです.mynet.pyのようです.(3)トレイをimagnet.pyも名前を修正した方がいいです.train_に変更してください.x.py.40行目のコードの中の「smbol」を削除します.そうでないと、あなたのネットワークファイルは「smbol」から命名しなければなりません.mynet.py. 1 , 残りはパーパー.add_です.argmentではデフォルト値を変更しました.そうでないと、mynet.pyを呼び出して各パラメータを正確に指定しなければなりません.(4)スクリプトファイルを書くと、スクリプトファイルを実行してトレーニングを開始できます.如き 1
mxnetの長所は明らかで、簡潔で、効率的で、多機多カードのサポートが良いです.
mxnetのgithubダウンロードリンク:https://github.com/dmlc/mxnet/
mxnetの開発文書リンク:http://mxnet.readthedocs.org/en/latest/build.html
開発された文書は分かりやすく、インストール、文法、例などが含まれています.
1-トレーニング画像をフォーマットに変換し、ネットワークに送る方法
caffeでモデルをトレーニングする前に、トレーニング画像をleveldbまたはLMBB形式のデータに変換するように、mxnetは訓練前に画像をREC形式のデータに変換します.
ここでは、変換プロセスを直接記録し、RECデータフォーマットのコードと最終的にどのようにRECフォーマットデータをネットワークに再ロードするかを詳細に説明します.
Linuxの下で変換するためのツールはmxnet/binの下で「im 2 rec」という実行可能ファイルです.ファイルのソースはmxnet/tools/m 2 rec.cを確認できます.
まず、以下のim 2 recの変換ツールにはどのような入力パラメータがあるかを説明する.
まず入力しなければならない3つのパラメータです.順番は
image_lst: //
image_root_dir://
output_rec:// .rec
オプションの入力パラメータはあります.
label_width:// , 1,
resize: // -1, 。 resize ,
%% 300*200,resize=100, 150*100.
quality: //JPEG , 80。 1-100.(mxnet )
center_crop: // 0,if(center_crop), 。 : if(resize>0) , 。
nsplit:// 1, , image_lst nsplit part
%% , , 12 ,nsplit=3, 5+4+3, 4+4+4.( )
part: // 0, 。 nsplit , nsplit part
1 0 FY2D1.bmp
2 1 FY2E1.bmp
3 0 FY2D2.bmp
4 1 FY2E2.bmp
#!/bin/sh
/home/zfan/mxnet/bin/im2rec train.txt data/ train.rec quality=90 resize=1000
(3)端末を開けて、cdからconvert.shのあるフォルダに入力してください.運転ヒントは以下の通りです.[15:44:19] tools/im2rec.cc:54: New Image Size: Short Edge 1000
[15:44:19] tools/im2rec.cc:76: Write to output: train.rec
[15:44:19] tools/im2rec.cc:78: Output: train.rec
[15:44:19] tools/im2rec.cc:86: JPEG encoding quality: 90
[15:44:19] tools/im2rec.cc:160: Total: 4 images processed, 0.166033 sec elapsed
全体として、トレーニングを開始するには、3つの部分が必要である.トレーニングパラメータ、ネットワークモデル、トレーニングデータ.前のセクションでは、どのように元の画像データをmxnetに変換することができますか?RECフォーマットのデータを紹介しました.しかし、実際に訓練する時、RECデータを私達のトレーニングネットワークに送るツールが必要です.このツールは「ディエゼル」です.
mxnetは、私たちのために、迅速にサブジェネレータを構築するための関数ImagerecordIterを提供しています.この関数はpython/mxnet/io.pyに位置しています.または、pythonコマンドウィンドウに以下のコマンドを入力して、io関数の位置および説明を取得することができます.
import mxnet as mx
help(mx.io)
# help(mx.io.ImageRecordIter)
path_imgrec:rec ;string ; './data/imgrec.rec'
data_shape: , ; ;
mean_img: ;string ;
batch_size:batch ;int ;
shuffle: ; ; False;
mirror: ; ; False;
rand_mirror: ; ; False;
rand_crop: ; ; False;
label_width: ;int ; 1
mean_r、 mean_g、 mean_b:3 ;float ; 0
num_parts: ;int ; 1
part_index: ;int ; 0
#
def get_iterator(args, kv):
train = mx.io.ImageRecordIter(
path_imgrec = args.data_dir + "train.rec",
mean_img = args.data_dir + "mean.bin",
data_shape = data_shape,
batch_size = args.batch_size,
rand_crop = True,
rand_mirror = True,
num_parts = kv.num_workers,
part_index = kv.rank)
val = mx.io.ImageRecordIter(
path_imgrec = args.data_dir + "val.rec",
mean_img = args.data_dir + "mean.bin",
rand_crop = False,
rand_mirror = False,
data_shape = data_shape,
batch_size = args.batch_size,
num_parts = kv.num_workers,
part_index = kv.rank)
return (train, val)
import mxnet as mx
help(mx.symbol)
(1)Activation:アクティブ関数
data: ,symbol
act_type: {'relu', 'sigmoid', 'tanh'}, 3
(2)Convolution:畳込み層data: ,symbol
weight: ,symbol
bias: ,symbol
kernal: (y,x), tuple
stride: (y,x), tuple , (1,1)
pad: (y,x), tuple , (0,0)
num_filter : ( ) ,int
no_bias : , , False
num_group:groups ,int , 1. CUDNN , you can use SliceChannel to num_group,apply convolution and concat instead to achieve the same need.
workspace: Tmp MB。long , 512
data: ,symbol
p : dropped out ,float , 0.5
data: ,symbol
name : string, optional. Name of the resulting symbol.
data: ,symbol
weight: ,symbol
bias: ,symbol
no_bias : , , False
num_hidden: ,int
data: ,symbol
alpha : float, optional, default=0.0001.value of the alpha variance scaling parameter in the normalization formula
beta : float, optional, default=0.75.value of the beta power parameter in the normalization formula
knorm : float, optional, default=2.value of the k parameter in normalization formula
nsize : int (non-negative), required.normalization window width in elements.
data: ,symbol
kernal:pooling (y,x), tuple
stride:pooling (y,x), tuple , (1,1)
pad:pooling (y,x), tuple , (0,0)
pool_type : pooling , 3 {'avg', 'max', 'sum'}
data: ,symbol
grad_scale : ,float , 1
multi_output : , False
# If set to true, for a (n,k,x_1,..,x_n) dimensionalinput tensor, softmax will generate n*x_1*...*x_n output, eachhas k classes
name : ,str
attr : dict of string -> string.Additional attributes to set on the variable.
3-トレーニング開始
まず、私たちは今何を持っていますか?ネットワークモデルを保存したpyファイル、RECフォーマットのトレーニングデータ、データをネットワークのローズマリーに送ります.この基礎の上で、私達の足りないのはネットの訓練のいくつかの制御のパラメーターだけが残ります.例えば、学習率、訓練の日誌、GPUの選択など.初期には、細かいことは気にしないで早く使ってもいいです.それなら、一番簡単な方法はカバーmxnetの例を直接修正することです.例は主に/example/image-classicationと/tests/pythonに集中しています.簡単なトレーニング方法を紹介します.(1)ファイルを新規作成して、ファイルの下でファイルを作成します.mxnet.py、smbol_alexnet.py、train_imagnet.pyとtrain_model.pyの4つのファイルのcopyが入ります.(2)find_を保つmxnet.pyファイルはそのままで、smbol_alexnet.pyでは、Alexnetネットワークの構築方法に従って、自分のネットワークを構築します.最后に、ファイル名を自分のネット名に変えたほうがいいです.mynet.pyのようです.(3)トレイをimagnet.pyも名前を修正した方がいいです.train_に変更してください.x.py.40行目のコードの中の「smbol」を削除します.そうでないと、あなたのネットワークファイルは「smbol」から命名しなければなりません.mynet.py.
net = importlib.import_module('symbol_' + args.network).get_symbol(args.num_classes)
:
net = importlib.import_module(args.network).get_symbol(args.num_classes)
python train_xx.py --data-dir=xx --model-prefix==xx --gpus=0
# epoch , model-prefix
:http://blog.csdn.net/shuzfan/article/details/50037273