GitHub のコードの場所: https://github.com/HansRen1024/Use-Python-to-call-Caffe-module
前書き#
注意深い学生は、前の記事の最後に完全なコードがあることに気付いたかもしれません。4 つの文で完了します。もちろん、複数のカードでのトレーニングを行う場合は、caffe/python/ ディレクトリ内の train.py を使用することをお勧めします。
トレーニング結果の可視化については、以前の記事で説明しました。ターミナルの出力を記録し、それを matlab で実装します。アドレス:
【Caffe】自分のデータを素早くトレーニングする《Caffe を真剣に語る》
6 番目のセクションを参照してください。
今日は、Python で Caffe モジュールを呼び出す方法について説明します。トレーニング中に出力結果をリストに格納し、最後にトレーニングが終了したらリストの内容を可視化します。
完全なコード:#
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 30 21:56:32 2017
author: hans
"""
import matplotlib.pyplot as plt
import caffe
import numpy as np
caffe.set_device(0)
caffe.set_mode_gpu()
solver = caffe.SGDSolver('doc/solver_lenet.prototxt')
# 下記のパラメータはsolverを参照してください
max_iter = 10000
display= 100
test_iter = 100
test_interval =500
#初期化
train_loss = np.zeros(max_iter/ display)
test_loss = np.zeros(max_iter/ test_interval)
test_acc = np.zeros(max_iter / test_interval)
_train_loss = 0
_test_loss = 0
_accuracy = 0
for it in range(max_iter):
solver.step(1) # ここで1回のイテレーションを実行します
_train_loss += solver.net.blobs['loss'].data # 'loss'または'Softmax1'
if it % display == 0:
# 平均トレーニングロスを計算する
train_loss[it / display] = _train_loss / display
_train_loss = 0
if it % test_interval == 0:
for test_it in range(test_iter):
solver.test_nets[0].forward()
_test_loss += solver.test_nets[0].blobs['loss'].data # 'loss'または'Softmax1'
_accuracy += solver.test_nets[0].blobs['acc'].data # 'acc'または'Accuracy1'
# 平均テストロスを計算する
test_loss[it / test_interval] = _test_loss / test_iter
# 平均テスト精度を計算する
test_acc[it / test_interval] = _accuracy / test_iter
_test_loss = 0
_accuracy = 0
_, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(display * np.arange(len(train_loss)), train_loss, 'g')
ax1.plot(test_interval * np.arange(len(test_loss)), test_loss, 'y')
ax2.plot(test_interval * np.arange(len(test_acc)), test_acc, 'r')
ax1.set_xlabel('iteration')
ax1.set_ylabel('loss')
ax2.set_ylabel('accuracy')
plt.show()
上記の内容は、次のサイトを参考にしています: http://www.cnblogs.com/denny402/p/5686067.html