سلام
همونطور که آقا سینا توضیح دادن شما معماری رو در داخل فایلهایی با پسوند prototxt طراحی میکنید.
یعنی ابتدا یک فایل ایجاد میکنید با پسوند .prototxt (مثلا با نام train_test.prototxt) و بعد یک فایل دیگه ایجاد میکنید با نام solver.prototxt . در فایل اول معماری خودتون رو مینویسید و در فایل دوم تنظیمات مربوط به آموزش مثل تعداد تکرار ، نرخ یادگیری، مسیر شبکه(که مسیر فایل train_test.prototxt رو مشخص میکنید) و....
مثلا تعریف شبکه ای که در آموزش 5 ام میبینید باید در یک فایل با پسوند prototxt ذخیره بشه
مثلا lenet_train_test.prototxt :
name: "LeNet"
layers {
name: "mnist"
type: DATA
top: "data"
top: "label"
data_param {
source: "examples/mnist/mnist_train_lmdb"
backend: LMDB
batch_size: 64
}
transform_param {
scale: 0.00390625
}
include: { phase: TRAIN }
}
layers {
name: "mnist"
type: DATA
top: "data"
top: "label"
data_param {
source: "examples/mnist/mnist_test_lmdb"
backend: LMDB
batch_size: 100
}
transform_param {
scale: 0.00390625
}
include: { phase: TEST }
}
layers {
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
blobs_lr: 1
blobs_lr: 2
convolution_param {
num_output: 20
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layers {
name: "pool1"
type: POOLING
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layers {
name: "conv2"
type: CONVOLUTION
bottom: "pool1"
top: "conv2"
blobs_lr: 1
blobs_lr: 2
convolution_param {
num_output: 50
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layers {
name: "pool2"
type: POOLING
bottom: "conv2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layers {
name: "ip1"
type: INNER_PRODUCT
bottom: "pool2"
top: "ip1"
blobs_lr: 1
blobs_lr: 2
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layers {
name: "relu1"
type: RELU
bottom: "ip1"
top: "ip1"
}
layers {
name: "ip2"
type: INNER_PRODUCT
bottom: "ip1"
top: "ip2"
blobs_lr: 1
blobs_lr: 2
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layers {
name: "accuracy"
type: ACCURACY
bottom: "ip2"
bottom: "label"
top: "accuracy"
include: { phase: TEST }
}
layers {
name: "loss"
type: SOFTMAX_LOSS
bottom: "ip2"
bottom: "label"
top: "loss"
}
,و تنظیمات هم باید در یک فایل دیگه
# مسیر فایل مربوط به معماری شما که برای آموزش و تست استفاده میشه.
net: "examples/mnist/lenet_train_test.prototxt"
test_iter: 100
# Carry out testing every 500 training iterations.
test_interval: 500
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# سیاست موجود برای نرخ یادگیری
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# نتایج را در هر 100 بار تکرار نمایش بده
display: 100
# بیشترین تعداد تکرار
max_iter: 10000
# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
# در اینجا مشخص میکنیم که آیا عملیات با استفاده از سی پی یو اجرا شود یا جی پی یو.
solver_mode: GPU
این فایل رو هم مثلا با نام solver.prototxt ذخیره میکنید.
حالا برای شروع آموزش شبکه وارد ترمینال یا command prompt میشید و از روت caffe دستوراتی که در زیر توضیح میدم رو وارد میکنید
روت کفی یعنی پوشه اصلی کفی که وقتی واردش میشید پوشه های examples, tools, scripts ,data,model و ... .مشخص هست. (مسیر جاری شما در ترمینال باید روت کفی باشه تا وقتی دستورات رو بصورت نسبی وارد میکنید خطا نگیرید)
حالت کلی دستور بشکل زیر هست و این رو در ترمینال باید وارد کرد .
caffe train ‐solver examples/mnist/solver.prototxt
اینجا ما مسیر فایل solver خودمون رو در قالب یک ارگومان برای فایل اجرایی کفی ارسال میکنیم . همونطور که میبینید کفی دوتا آرگومان گرفته یکی train و دیگری -solver که اولی مشخص میکنه ما بدنبال آموزش شبکه هستیم و دومی داره میگه مسیر فایل تنظیمات شبکه کجاست .
حالا درعمل بخواییم اجرا کنیم مسیر فایل اجرایی کفی رو هم باید مشخص کنیم یعنی نهایتا اینطور میشه :
./build/tools/caffe train --solver=examples/mnist/solver.prototxt
که اطلاعات کامل در بخش سوم آموزش کفی اومده .
حالا برای اینکه هربار ما این دستور رو در ترمینال وارد نکنیم میشه این دستور رو داخل یک فایل با پسوند sh نوشت (در لینوکس و در ویندوز هم در قالب یک فایل .bat ) و موقع اجرا فقط همون فایل بش یا بچ رو اجرا کرد . برای همین هست که در آموزش با دستوراتی مثل زیر شما مواجه میشید :
./examples/mnist/ train_lenet.sh
ضمنا یادتون باشه قبل از انجام آموزش باید دیتاست رو ایجاد بکنید همونطوری که در آموزش پنجم توضیح داده شده و بعدز اینکه با موفقیت مراحل ساخت دیتاست رو انجام دادید نوبت به آموزش شبکه است.