教程:(57条消息) ubuntu18.04编译使用 caffe cpu 使用工具示例 训练示例_Hero_HL的博客-CSDN博客
【进入容器内】
sudo docker run -it --name my_caffe_container bvlc/caffe:cpu /bin/bash
-run:运行新进程
-it:交互式,与容器交互
--name my_caffe_container:指定容器名称
bvlc/caffe:cpu: 要运行的 Docker 镜像的名称及其标签
【进入caffe运行.sh来get获得data测试目录】
apt-get install wget
cd /opt/caffe/data/mnist
./get_mnist.sh
【查看.sh脚本】
cat create_mnist.sh
mnist引用的案例/数据/生成的文件location
**测试目录data .sh生成了data
root@d7150bf06816:/opt/caffe# ./examples/mnist/create_mnist.sh
**测试数据examples .sh生成了examples:
mnist_train_lmdb和mnist_test_lmdb
【生成图形界面】
apt-get install graphviz
pip install pydot
【新建目录+文件】
root@d7150bf06816:/opt/caffe# mkdir mytrain
nano hbk_mnist.prototxt
name: "hbk_mnist"
# train/test lmdb数据层
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "/opt/caffe/examples/mnist/mnist_train_lmdb"
batch_size: 64
backend: LMDB
}
}
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
scale: 0.00390625
}
data_param {
source: "/opt/caffe/examples/mnist/mnist_test_lmdb"
batch_size: 100
backend: LMDB
}
}
# 全连接层,激活层为ReLU 784->500->10
layer {
name: "ip1"
type: "InnerProduct"
bottom: "data"
top: "ip1"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "ip1"
top: "re1"
}
layer {
name: "ip2"
type: "InnerProduct"
bottom: "re1"
top: "ip2"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
# 测试验证用,不必须,输出准确率
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip2"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
# 代价Cost层
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}
一个train文件,一个test文件路径(测试的数据)
【在mytrain绘制神经网络结构图】
root@d7150bf06816:/opt/caffe/mytrain# python ../python/draw_net.py hbk_mnist.prototxt aa.png --rankdir=BT
python ../python/draw_net.py hbk_mnist.prototxt aa.png --rankdir=LR
B-竖
L-横
【评估mytrain模型prototxt执行时间】
caffe time -model hbk_mnist.prototxt -iterations 100
迭代次数 -iterations 100
【mytrain新建一个solver.prototxt文件】
# The train/test net 文件路径
net: "hbk_mnist.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100
# 训练迭代多少次执行一次Test验证
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
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# 多少次迭代输出一次信息
display: 100
# The maximum number of iterations
max_iter: 10001
# 存储中间结果
snapshot: 5000
snapshot_prefix: "snapshot"
# solver mode: CPU or GPU
solver_mode: CPU
【用caffe执行模型训练】
caffe train -solver hbk_mnist_solver.prototxt
-solver hbk_mnist_solver.prototxt
: 是一个命令行参数,用于指定求解器配置文件的路径。hbk_mnist_solver.prototxt:
是一个包含训练参数和配置的文件,它描述了模型训练的设置,如优化算法、学习率、迭代次数等。
【输出结果重定向到b.log (2标准输出也视作1错误输出)】
caffe train -solver hbk_mnist_solver.prototxt >./b.log 2>&1
caffe train -solver hbk_mnist_solver.prototxt 2>&1 | tee a.log
在 Caffe 中训练一个神经网络模型,并将训练过程中的输出保存到日志文件中
2>&1
: 这部分与前面的命令相同,表示将标准错误输出重定向到标准输出的位置。| tee a.log
: 这部分使用管道符将标准输出传递给tee
命令。tee
命令会同时显示输出内容在终端上,并将输出内容保存到名为a.log
的日志文件中。
【日志打成图】
apt install python-tk
apt install tk-dev
apt-get install bsdmainutils (安装column命令,caffe脚本中需要用到column命令)
caffe/tools/extra/plot_training_log.py.example加上:
import matplotlib
matplotlib.use('Agg')
Matplotlib 的后端为agg:图表的无界面绘制
【在mytrain通过python绘图】
python ../tools/extra/plot_training_log.py.example 6 plotlog.png a.log
python …/tools/extra/plot_training_log.py.example 0 plotlog_accuracy_vs_iters.png a.log
【挂载方式拷贝到我的主机】
docker cp d7150bf06816:/opt/caffe/mytrain/plotlog_accuracy_vs_iters.png /home/lin/guazai/