日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper

發(fā)布時(shí)間:2025/3/21 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

最近打算重新跟著官方教程學(xué)習(xí)一下caffe,順便也自己翻譯了一下官方的文檔。自己也做了一些標(biāo)注,都用斜體標(biāo)記出來了。中間可能額外還加了自己遇到的問題或是運(yùn)行結(jié)果之類的。歡迎交流指正,拒絕噴子!
官方教程的原文鏈接:
http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/brewing-logreg.ipynb

這篇教程中對(duì)了sklearn的邏輯回歸函數(shù)和使用caffe直接定義的邏輯回歸網(wǎng)絡(luò)進(jìn)行了比較。其中有些函數(shù)因?yàn)閹斓母聦?dǎo)致調(diào)用方式不同,我在程序中修改并注釋了出來,總體來說是很容易看懂的。

Brewing Logistic Regression then Going Deeper

盡管Caffe是專門為深度網(wǎng)絡(luò)設(shè)計(jì)的,但它同樣也可以表示”淺層模型”,比如用于分類的邏輯回歸。我們將對(duì)合成的數(shù)據(jù)進(jìn)行邏輯回歸,并對(duì)保存在HDF5格式的文件中,以便將數(shù)據(jù)提交給caffe。一旦模型已經(jīng)完成了,我們還會(huì)添加一些層到該模型上以提高準(zhǔn)確性。這也正是caffe所要做的:定義模型,進(jìn)行實(shí)驗(yàn),部署模型。

import numpy as np import matplotlib.pyplot as plt %matplotlib inline# 指定caffe路徑 caffe_root = '/home/xhb/caffe/caffe/' # this file should be run from {caffe_root}/examples (otherwise change this line)import os # os.chdir('..') os.chdir(caffe_root)import sys sys.path.insert(0, './python') import caffeimport os import h5py import shutil import tempfileimport sklearn import sklearn.datasets import sklearn.linear_modelimport pandas as pd

合成具有2個(gè)信息特征和2個(gè)噪聲特征的4維向量組成的數(shù)據(jù)集,共計(jì)10000個(gè)樣本,用于二分類。

X, y = sklearn.datasets.make_classification(n_samples=10000, n_features=4, n_redundant=0, n_informative=2,n_clusters_per_class=2, hypercube=False, random_state=0 )# Split into train and test X, Xt, y, yt = sklearn.model_selection.train_test_split(X, y)# Visualize sample of the data ind = np.random.permutation(X.shape[0])[:1000] df = pd.DataFrame(X[ind]) # _ = pd.plotting.scatter_matrix(df, figsize=(9, 9), diagonal='kde', marker='o', s=40, alpha=.4, c=y[ind]) _ = pd.tools.plotting.scatter_matrix(df, figsize=(9, 9), diagonal='kde', marker='o', s=40, alpha=.4, c=y[ind])

通過隨機(jī)梯度下降法(SGD)訓(xùn)練和評(píng)估sklearn的邏輯回歸算法。計(jì)時(shí),并檢查一下算法的準(zhǔn)確率把。

%%timeit # Train and test the scikit-learn SGD logistic regression. # clf = sklearn.linear_model.SGDClassifier( # loss='log', n_iter=1000, penalty='l2', alpha=5e-4, class_weight='balanced' # )# n_iter在新版本中被替換成max_iter,會(huì)在將來的版本中移除 clf = sklearn.linear_model.SGDClassifier(loss='log', max_iter=1000, penalty='l2', alpha=5e-4, class_weight='balanced' )clf.fit(X, y) yt_pred = clf.predict(Xt) print('Accuracy: {:.3f}'.format(sklearn.metrics.accuracy_score(yt, yt_pred))) Accuracy: 0.770 Accuracy: 0.769 Accuracy: 0.770 Accuracy: 0.770 1 loop, best of 3: 1.07 s per loop

把數(shù)據(jù)集保存為HDF5格式以導(dǎo)入Caffe。

# Write out the data to HDF5 files in a temp directory. # This file is assumed to be caffe_root/examples/hdf5_classification.ipynb dirname = os.path.abspath('./examples/hdf5_classification/data') if not os.path.exists(dirname):os.makedirs(dirname)train_filename = os.path.join(dirname, 'train.h5') test_filename = os.path.join(dirname, 'test.h5')# HDF5DataLayer source should be a file containing a list of HDF5 filenames. # To show this off, we'll list the same data file twice. with h5py.File(train_filename, 'w') as f:f['data'] = Xf['label'] = y.astype(np.float32) with open(os.path.join(dirname, 'train.txt'), 'w') as f:f.write(train_filename + '\n')f.write(train_filename + '\n')# HDF5 is pretty efficient, but can be further compressed. comp_kwargs = {'compression': 'gzip', 'compression_opts': 1} with h5py.File(test_filename, 'w') as f:f.create_dataset('data', data=Xt, **comp_kwargs)f.create_dataset('label', data=yt.astype(np.float32), **comp_kwargs) with open(os.path.join(dirname, 'test.txt'), 'w') as f:f.write(test_filename + '\n')

我們通過Python網(wǎng)絡(luò)規(guī)范定義Caffe中的邏輯回歸模型。這是一種快速且自然的定義網(wǎng)絡(luò)的方式,避免了我們手動(dòng)編輯protobuf模型。

from caffe import layers as L from caffe import params as Pdef logreg(hdf5, batch_size):# logistic regression: data, matrix multiplication, and 2-class softmax lossn = caffe.NetSpec()n.data, n.label = L.HDF5Data(batch_size=batch_size, source=hdf5, ntop=2)n.ip1 = L.InnerProduct(n.data, num_output=2, weight_filler=dict(type='xavier'))n.accuracy = L.Accuracy(n.ip1, n.label)return n.to_proto()# 訓(xùn)練網(wǎng)絡(luò) train_net_path = 'examples/hdf5_classification/logreg_auto_train.prototxt' with open(train_net_path, 'w') as f:f.write(str(logreg('examples/hdf5_classification/data/train.txt', 10)))# 測(cè)試網(wǎng)絡(luò) test_net_path = 'examples/hdf5_classification/logreg_auto_test.prototxt' with open(test_net_path, 'w') as f:f.write(str(logreg('examples/hdf5_classification/data/test.txt', 10)))

現(xiàn)在我們要定義“solver”了,這個(gè)文件中會(huì)指明我們?cè)谀睦锒x了上面的訓(xùn)練和測(cè)試網(wǎng)絡(luò),并設(shè)置了訓(xùn)練過程中的一些相關(guān)參數(shù)。

from caffe.proto import caffe_pb2def solver(train_net_path, test_net_path):s = caffe_pb2.SolverParameter()# Specify locations of the train and test networks.s.train_net = train_net_paths.test_net.append(test_net_path)s.test_interval = 1000 # Test after every 1000 training iterations.s.test_iter.append(250) # Test 250 "batches" each time we test.s.max_iter = 10000 # # of times to update the net (training iterations)# Set the initial learning rate for stochastic gradient descent (SGD).s.base_lr = 0.01 # Set `lr_policy` to define how the learning rate changes during training.# Here, we 'step' the learning rate by multiplying it by a factor `gamma`# every `stepsize` iterations.s.lr_policy = 'step's.gamma = 0.1s.stepsize = 5000# Set other optimization parameters. Setting a non-zero `momentum` takes a# weighted average of the current gradient and previous gradients to make# learning more stable. L2 weight decay regularizes learning, to help prevent# the model from overfitting.s.momentum = 0.9s.weight_decay = 5e-4# Display the current training loss and accuracy every 1000 iterations.s.display = 1000# Snapshots are files used to store networks we've trained. Here, we'll# snapshot every 10K iterations -- just once at the end of training.# For larger networks that take longer to train, you may want to set# snapshot < max_iter to save the network and training state to disk during# optimization, preventing disaster in case of machine crashes, etc.s.snapshot = 10000s.snapshot_prefix = 'examples/hdf5_classification/data/train'# We'll train on the CPU for fair benchmarking against scikit-learn.# Changing to GPU should result in much faster training!s.solver_mode = caffe_pb2.SolverParameter.CPUreturn ssolver_path = 'examples/hdf5_classification/logreg_solver.prototxt' with open(solver_path, 'w') as f:f.write(str(solver(train_net_path, test_net_path)))

是時(shí)候評(píng)估一下我們?cè)赾affe中使用python接口定義的邏輯回歸模型了。

%%timeit caffe.set_mode_cpu() solver = caffe.get_solver(solver_path) solver.solve()accuracy = 0 batch_size = solver.test_nets[0].blobs['data'].num test_iters = int(len(Xt) / batch_size) for i in range(test_iters):solver.test_nets[0].forward()accuracy += solver.test_nets[0].blobs['accuracy'].data accuracy /= test_itersprint("Accuracy: {:.3f}".format(accuracy)) Accuracy: 0.538 Accuracy: 0.366 Accuracy: 0.472 Accuracy: 0.524 Accuracy: 0.434 Accuracy: 0.408 Accuracy: 0.654 Accuracy: 0.416 Accuracy: 0.569 Accuracy: 0.450 Accuracy: 0.505 Accuracy: 0.438 Accuracy: 0.596 Accuracy: 0.602 Accuracy: 0.528 Accuracy: 0.488 Accuracy: 0.551 Accuracy: 0.459 Accuracy: 0.585 Accuracy: 0.500 Accuracy: 0.416 Accuracy: 0.632 Accuracy: 0.528 Accuracy: 0.542 Accuracy: 0.601 Accuracy: 0.316 Accuracy: 0.592 Accuracy: 0.700 Accuracy: 0.530 Accuracy: 0.682 Accuracy: 0.603 Accuracy: 0.553 Accuracy: 0.406 Accuracy: 0.418 Accuracy: 0.546 Accuracy: 0.668 Accuracy: 0.660 Accuracy: 0.497 Accuracy: 0.610 Accuracy: 0.620 Accuracy: 0.570 10 loops, best of 3: 83.3 ms per loop

通過命令行運(yùn)行一遍,訓(xùn)練并評(píng)估網(wǎng)絡(luò)。

!./build/tools/caffe train -solver examples/hdf5_classification/logreg_solver.prototxt I0314 20:15:20.180691 9415 caffe.cpp:197] Use CPU. I0314 20:15:20.180891 9415 solver.cpp:45] Initializing solver from parameters: train_net: "examples/hdf5_classification/logreg_auto_train.prototxt" test_net: "examples/hdf5_classification/logreg_auto_test.prototxt" test_iter: 250 test_interval: 1000 base_lr: 0.01 display: 1000 max_iter: 10000 lr_policy: "step" gamma: 0.1 momentum: 0.9 weight_decay: 0.0005 stepsize: 5000 snapshot: 10000 snapshot_prefix: "examples/hdf5_classification/data/train" solver_mode: CPU train_state {level: 0stage: "" } I0314 20:15:20.180980 9415 solver.cpp:92] Creating training net from train_net file: examples/hdf5_classification/logreg_auto_train.prototxt I0314 20:15:20.181069 9415 net.cpp:51] Initializing net from parameters: state {phase: TRAINlevel: 0stage: "" } layer {name: "data"type: "HDF5Data"top: "data"top: "label"hdf5_data_param {source: "examples/hdf5_classification/data/train.txt"batch_size: 10} } layer {name: "ip1"type: "InnerProduct"bottom: "data"top: "ip1"inner_product_param {num_output: 2weight_filler {type: "xavier"}} } layer {name: "accuracy"type: "Accuracy"bottom: "ip1"bottom: "label"top: "accuracy" } I0314 20:15:20.181141 9415 layer_factory.hpp:77] Creating layer data I0314 20:15:20.181154 9415 net.cpp:84] Creating Layer data I0314 20:15:20.181159 9415 net.cpp:380] data -> data I0314 20:15:20.181175 9415 net.cpp:380] data -> label I0314 20:15:20.181185 9415 hdf5_data_layer.cpp:80] Loading list of HDF5 filenames from: examples/hdf5_classification/data/train.txt I0314 20:15:20.181211 9415 hdf5_data_layer.cpp:94] Number of HDF5 files: 2 I0314 20:15:20.181999 9415 hdf5.cpp:32] Datatype class: H5T_FLOAT I0314 20:15:20.182400 9415 net.cpp:122] Setting up data I0314 20:15:20.182418 9415 net.cpp:129] Top shape: 10 4 (40) I0314 20:15:20.182422 9415 net.cpp:129] Top shape: 10 (10) I0314 20:15:20.182426 9415 net.cpp:137] Memory required for data: 200 I0314 20:15:20.182433 9415 layer_factory.hpp:77] Creating layer ip1 I0314 20:15:20.182446 9415 net.cpp:84] Creating Layer ip1 I0314 20:15:20.182451 9415 net.cpp:406] ip1 <- data I0314 20:15:20.182462 9415 net.cpp:380] ip1 -> ip1 I0314 20:15:20.182797 9415 net.cpp:122] Setting up ip1 I0314 20:15:20.182804 9415 net.cpp:129] Top shape: 10 2 (20) I0314 20:15:20.182807 9415 net.cpp:137] Memory required for data: 280 I0314 20:15:20.182821 9415 layer_factory.hpp:77] Creating layer accuracy I0314 20:15:20.182826 9415 net.cpp:84] Creating Layer accuracy I0314 20:15:20.182832 9415 net.cpp:406] accuracy <- ip1 I0314 20:15:20.182837 9415 net.cpp:406] accuracy <- label I0314 20:15:20.182847 9415 net.cpp:380] accuracy -> accuracy I0314 20:15:20.182855 9415 net.cpp:122] Setting up accuracy I0314 20:15:20.182859 9415 net.cpp:129] Top shape: (1) I0314 20:15:20.182863 9415 net.cpp:137] Memory required for data: 284 I0314 20:15:20.182868 9415 net.cpp:200] accuracy does not need backward computation. I0314 20:15:20.182874 9415 net.cpp:200] ip1 does not need backward computation. I0314 20:15:20.182879 9415 net.cpp:200] data does not need backward computation. I0314 20:15:20.182883 9415 net.cpp:242] This network produces output accuracy I0314 20:15:20.182889 9415 net.cpp:255] Network initialization done. I0314 20:15:20.182951 9415 solver.cpp:190] Creating test net (#0) specified by test_net file: examples/hdf5_classification/logreg_auto_test.prototxt I0314 20:15:20.182987 9415 net.cpp:51] Initializing net from parameters: state {phase: TEST } layer {name: "data"type: "HDF5Data"top: "data"top: "label"hdf5_data_param {source: "examples/hdf5_classification/data/test.txt"batch_size: 10} } layer {name: "ip1"type: "InnerProduct"bottom: "data"top: "ip1"inner_product_param {num_output: 2weight_filler {type: "xavier"}} } layer {name: "accuracy"type: "Accuracy"bottom: "ip1"bottom: "label"top: "accuracy" } I0314 20:15:20.183029 9415 layer_factory.hpp:77] Creating layer data I0314 20:15:20.183037 9415 net.cpp:84] Creating Layer data I0314 20:15:20.183060 9415 net.cpp:380] data -> data I0314 20:15:20.183069 9415 net.cpp:380] data -> label I0314 20:15:20.183076 9415 hdf5_data_layer.cpp:80] Loading list of HDF5 filenames from: examples/hdf5_classification/data/test.txt I0314 20:15:20.183092 9415 hdf5_data_layer.cpp:94] Number of HDF5 files: 1 I0314 20:15:20.184141 9415 net.cpp:122] Setting up data I0314 20:15:20.184157 9415 net.cpp:129] Top shape: 10 4 (40) I0314 20:15:20.184165 9415 net.cpp:129] Top shape: 10 (10) I0314 20:15:20.184168 9415 net.cpp:137] Memory required for data: 200 I0314 20:15:20.184175 9415 layer_factory.hpp:77] Creating layer ip1 I0314 20:15:20.184182 9415 net.cpp:84] Creating Layer ip1 I0314 20:15:20.184187 9415 net.cpp:406] ip1 <- data I0314 20:15:20.184195 9415 net.cpp:380] ip1 -> ip1 I0314 20:15:20.184208 9415 net.cpp:122] Setting up ip1 I0314 20:15:20.184214 9415 net.cpp:129] Top shape: 10 2 (20) I0314 20:15:20.184218 9415 net.cpp:137] Memory required for data: 280 I0314 20:15:20.184227 9415 layer_factory.hpp:77] Creating layer accuracy I0314 20:15:20.184233 9415 net.cpp:84] Creating Layer accuracy I0314 20:15:20.184237 9415 net.cpp:406] accuracy <- ip1 I0314 20:15:20.184242 9415 net.cpp:406] accuracy <- label I0314 20:15:20.184247 9415 net.cpp:380] accuracy -> accuracy I0314 20:15:20.184254 9415 net.cpp:122] Setting up accuracy I0314 20:15:20.184259 9415 net.cpp:129] Top shape: (1) I0314 20:15:20.184263 9415 net.cpp:137] Memory required for data: 284 I0314 20:15:20.184267 9415 net.cpp:200] accuracy does not need backward computation. I0314 20:15:20.184273 9415 net.cpp:200] ip1 does not need backward computation. I0314 20:15:20.184276 9415 net.cpp:200] data does not need backward computation. I0314 20:15:20.184280 9415 net.cpp:242] This network produces output accuracy I0314 20:15:20.184286 9415 net.cpp:255] Network initialization done. I0314 20:15:20.184298 9415 solver.cpp:57] Solver scaffolding done. I0314 20:15:20.184310 9415 caffe.cpp:239] Starting Optimization I0314 20:15:20.184315 9415 solver.cpp:293] Solving I0314 20:15:20.184319 9415 solver.cpp:294] Learning Rate Policy: step I0314 20:15:20.184334 9415 solver.cpp:351] Iteration 0, Testing net (#0) I0314 20:15:20.184962 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.184989 9415 solver.cpp:239] Iteration 0 (-4.27671e-38 iter/s, 0s/1000 iters), loss = 0 I0314 20:15:20.184999 9415 solver.cpp:258] Train net output #0: accuracy = 0.5 I0314 20:15:20.185014 9415 sgd_solver.cpp:112] Iteration 0, lr = 0.01 I0314 20:15:20.188537 9415 solver.cpp:351] Iteration 1000, Testing net (#0) I0314 20:15:20.189131 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.189147 9415 solver.cpp:239] Iteration 1000 (250000 iter/s, 0.004s/1000 iters), loss = 0 I0314 20:15:20.189157 9415 solver.cpp:258] Train net output #0: accuracy = 0.3 I0314 20:15:20.189163 9415 sgd_solver.cpp:112] Iteration 1000, lr = 0.01 I0314 20:15:20.192469 9415 solver.cpp:351] Iteration 2000, Testing net (#0) I0314 20:15:20.193065 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.193083 9415 solver.cpp:239] Iteration 2000 (333333 iter/s, 0.003s/1000 iters), loss = 0 I0314 20:15:20.193092 9415 solver.cpp:258] Train net output #0: accuracy = 0.4 I0314 20:15:20.193099 9415 sgd_solver.cpp:112] Iteration 2000, lr = 0.01 I0314 20:15:20.196584 9415 solver.cpp:351] Iteration 3000, Testing net (#0) I0314 20:15:20.197191 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.197218 9415 solver.cpp:239] Iteration 3000 (250000 iter/s, 0.004s/1000 iters), loss = 0 I0314 20:15:20.197227 9415 solver.cpp:258] Train net output #0: accuracy = 0.5 I0314 20:15:20.197234 9415 sgd_solver.cpp:112] Iteration 3000, lr = 0.01 I0314 20:15:20.200424 9415 solver.cpp:351] Iteration 4000, Testing net (#0) I0314 20:15:20.201073 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.201105 9415 solver.cpp:239] Iteration 4000 (333333 iter/s, 0.003s/1000 iters), loss = 0 I0314 20:15:20.201134 9415 solver.cpp:258] Train net output #0: accuracy = 0.3 I0314 20:15:20.201141 9415 sgd_solver.cpp:112] Iteration 4000, lr = 0.01 I0314 20:15:20.204327 9415 solver.cpp:351] Iteration 5000, Testing net (#0) I0314 20:15:20.204933 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.204959 9415 solver.cpp:239] Iteration 5000 (333333 iter/s, 0.003s/1000 iters), loss = 0 I0314 20:15:20.204968 9415 solver.cpp:258] Train net output #0: accuracy = 0.4 I0314 20:15:20.204974 9415 sgd_solver.cpp:112] Iteration 5000, lr = 0.001 I0314 20:15:20.208395 9415 solver.cpp:351] Iteration 6000, Testing net (#0) I0314 20:15:20.209000 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.209023 9415 solver.cpp:239] Iteration 6000 (250000 iter/s, 0.004s/1000 iters), loss = 0 I0314 20:15:20.209036 9415 solver.cpp:258] Train net output #0: accuracy = 0.5 I0314 20:15:20.209043 9415 sgd_solver.cpp:112] Iteration 6000, lr = 0.001 I0314 20:15:20.214056 9415 solver.cpp:351] Iteration 7000, Testing net (#0) I0314 20:15:20.215221 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.215267 9415 solver.cpp:239] Iteration 7000 (166667 iter/s, 0.006s/1000 iters), loss = 0 I0314 20:15:20.215284 9415 solver.cpp:258] Train net output #0: accuracy = 0.3 I0314 20:15:20.215293 9415 sgd_solver.cpp:112] Iteration 7000, lr = 0.001 I0314 20:15:20.221611 9415 solver.cpp:351] Iteration 8000, Testing net (#0) I0314 20:15:20.222805 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.222841 9415 solver.cpp:239] Iteration 8000 (142857 iter/s, 0.007s/1000 iters), loss = 0 I0314 20:15:20.222854 9415 solver.cpp:258] Train net output #0: accuracy = 0.4 I0314 20:15:20.222862 9415 sgd_solver.cpp:112] Iteration 8000, lr = 0.001 I0314 20:15:20.229424 9415 solver.cpp:351] Iteration 9000, Testing net (#0) I0314 20:15:20.230543 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.230583 9415 solver.cpp:239] Iteration 9000 (142857 iter/s, 0.007s/1000 iters), loss = 0 I0314 20:15:20.230597 9415 solver.cpp:258] Train net output #0: accuracy = 0.5 I0314 20:15:20.230604 9415 sgd_solver.cpp:112] Iteration 9000, lr = 0.001 I0314 20:15:20.236244 9415 solver.cpp:468] Snapshotting to binary proto file examples/hdf5_classification/data/train_iter_10000.caffemodel I0314 20:15:20.236490 9415 sgd_solver.cpp:280] Snapshotting solver state to binary proto file examples/hdf5_classification/data/train_iter_10000.solverstate I0314 20:15:20.236553 9415 solver.cpp:331] Iteration 10000, loss = 0 I0314 20:15:20.236580 9415 solver.cpp:351] Iteration 10000, Testing net (#0) I0314 20:15:20.237339 9415 solver.cpp:418] Test net output #0: accuracy = 0.4464 I0314 20:15:20.237366 9415 solver.cpp:336] Optimization Done. I0314 20:15:20.237373 9415 caffe.cpp:250] Optimization Done.

如果你查看一下logreg_auto_train.prototxt輸出的信息,你可以看到這個(gè)模型就只是個(gè)簡單的邏輯回歸。我們可以通過在輸入權(quán)重和輸出權(quán)重之間引入一個(gè)非線性單元來改進(jìn)這個(gè)模型——現(xiàn)在我們有一個(gè)雙層網(wǎng)絡(luò)。那個(gè)網(wǎng)絡(luò)定義在nonlinear_auto_train.prototxt中,這也是跟我們當(dāng)前使用模型相比唯一的改動(dòng)。
新的網(wǎng)絡(luò)的最終準(zhǔn)確率應(yīng)該要比邏輯回歸的高一些。

from caffe import layers as L from caffe import params as P# 就只是加了一個(gè)ReLU單元,其他都與前面邏輯回歸模型一樣 def nonlinear_net(hdf5, batch_size):# one small nonlinearity, one leap for model kindn = caffe.NetSpec()n.data, n.label = L.HDF5Data(batch_size=batch_size, source=hdf5, ntop=2)# define a hidden layer of dimension 40n.ip1 = L.InnerProduct(n.data, num_output=40, weight_filler=dict(type='xavier'))# transform the output through the ReLU (rectified linear) non-linearityn.relu1 = L.ReLU(n.ip1, in_place=True)# score the (now non-linear) featuresn.ip2 = L.InnerProduct(n.ip1, num_output=2, weight_filler=dict(type='xavier'))# same accuracy and loss as beforen.accuracy = L.Accuracy(n.ip2, n.label)n.loss = L.SoftmaxWithLoss(n.ip2, n.label)return n.to_proto()train_net_path = 'examples/hdf5_classification/nonlinear_auto_train.prototxt' with open(train_net_path, 'w') as f:f.write(str(nonlinear_net('examples/hdf5_classification/data/train.txt', 10)))test_net_path = 'examples/hdf5_classification/nonlinear_auto_test.prototxt' with open(test_net_path, 'w') as f:f.write(str(nonlinear_net('examples/hdf5_classification/data/test.txt', 10)))solver_path = 'examples/hdf5_classification/nonlinear_logreg_solver.prototxt' with open(solver_path, 'w') as f:f.write(str(solver(train_net_path, test_net_path))) %%timeit caffe.set_mode_cpu() solver = caffe.get_solver(solver_path) solver.solve()accuracy = 0 batch_size = solver.test_nets[0].blobs['data'].num test_iters = int(len(Xt) / batch_size) for i in range(test_iters):solver.test_nets[0].forward()accuracy += solver.test_nets[0].blobs['accuracy'].data accuracy /= test_itersprint("Accuracy: {:.3f}".format(accuracy)) Accuracy: 0.837 Accuracy: 0.839 Accuracy: 0.838 Accuracy: 0.838 1 loop, best of 3: 210 ms per loop

在命令行下運(yùn)行一下。

!./build/tools/caffe train -solver examples/hdf5_classification/nonlinear_logreg_solver.prototxt I0314 20:20:55.911592 11035 caffe.cpp:197] Use CPU. I0314 20:20:55.911850 11035 solver.cpp:45] Initializing solver from parameters: train_net: "examples/hdf5_classification/nonlinear_auto_train.prototxt" test_net: "examples/hdf5_classification/nonlinear_auto_test.prototxt" test_iter: 250 test_interval: 1000 base_lr: 0.01 display: 1000 max_iter: 10000 lr_policy: "step" gamma: 0.1 momentum: 0.9 weight_decay: 0.0005 stepsize: 5000 snapshot: 10000 snapshot_prefix: "examples/hdf5_classification/data/train" solver_mode: CPU train_state {level: 0stage: "" } I0314 20:20:55.911954 11035 solver.cpp:92] Creating training net from train_net file: examples/hdf5_classification/nonlinear_auto_train.prototxt I0314 20:20:55.912081 11035 net.cpp:51] Initializing net from parameters: state {phase: TRAINlevel: 0stage: "" } layer {name: "data"type: "HDF5Data"top: "data"top: "label"hdf5_data_param {source: "examples/hdf5_classification/data/train.txt"batch_size: 10} } layer {name: "ip1"type: "InnerProduct"bottom: "data"top: "ip1"inner_product_param {num_output: 40weight_filler {type: "xavier"}} } layer {name: "relu1"type: "ReLU"bottom: "ip1"top: "ip1" } layer {name: "ip2"type: "InnerProduct"bottom: "ip1"top: "ip2"inner_product_param {num_output: 2weight_filler {type: "xavier"}} } layer {name: "accuracy"type: "Accuracy"bottom: "ip2"bottom: "label"top: "accuracy" } layer {name: "loss"type: "SoftmaxWithLoss"bottom: "ip2"bottom: "label"top: "loss" } I0314 20:20:55.912179 11035 layer_factory.hpp:77] Creating layer data I0314 20:20:55.912197 11035 net.cpp:84] Creating Layer data I0314 20:20:55.912206 11035 net.cpp:380] data -> data I0314 20:20:55.912225 11035 net.cpp:380] data -> label I0314 20:20:55.912235 11035 hdf5_data_layer.cpp:80] Loading list of HDF5 filenames from: examples/hdf5_classification/data/train.txt I0314 20:20:55.912263 11035 hdf5_data_layer.cpp:94] Number of HDF5 files: 2 I0314 20:20:55.913141 11035 hdf5.cpp:32] Datatype class: H5T_FLOAT I0314 20:20:55.913615 11035 net.cpp:122] Setting up data I0314 20:20:55.913637 11035 net.cpp:129] Top shape: 10 4 (40) I0314 20:20:55.913645 11035 net.cpp:129] Top shape: 10 (10) I0314 20:20:55.913650 11035 net.cpp:137] Memory required for data: 200 I0314 20:20:55.913660 11035 layer_factory.hpp:77] Creating layer label_data_1_split I0314 20:20:55.913673 11035 net.cpp:84] Creating Layer label_data_1_split I0314 20:20:55.913681 11035 net.cpp:406] label_data_1_split <- label I0314 20:20:55.913693 11035 net.cpp:380] label_data_1_split -> label_data_1_split_0 I0314 20:20:55.913705 11035 net.cpp:380] label_data_1_split -> label_data_1_split_1 I0314 20:20:55.913714 11035 net.cpp:122] Setting up label_data_1_split I0314 20:20:55.913720 11035 net.cpp:129] Top shape: 10 (10) I0314 20:20:55.913724 11035 net.cpp:129] Top shape: 10 (10) I0314 20:20:55.913728 11035 net.cpp:137] Memory required for data: 280 I0314 20:20:55.913733 11035 layer_factory.hpp:77] Creating layer ip1 I0314 20:20:55.913743 11035 net.cpp:84] Creating Layer ip1 I0314 20:20:55.913748 11035 net.cpp:406] ip1 <- data I0314 20:20:55.913754 11035 net.cpp:380] ip1 -> ip1 I0314 20:20:55.914089 11035 net.cpp:122] Setting up ip1 I0314 20:20:55.914099 11035 net.cpp:129] Top shape: 10 40 (400) I0314 20:20:55.914103 11035 net.cpp:137] Memory required for data: 1880 I0314 20:20:55.914119 11035 layer_factory.hpp:77] Creating layer relu1 I0314 20:20:55.914126 11035 net.cpp:84] Creating Layer relu1 I0314 20:20:55.914130 11035 net.cpp:406] relu1 <- ip1 I0314 20:20:55.914136 11035 net.cpp:367] relu1 -> ip1 (in-place) I0314 20:20:55.914144 11035 net.cpp:122] Setting up relu1 I0314 20:20:55.914149 11035 net.cpp:129] Top shape: 10 40 (400) I0314 20:20:55.914152 11035 net.cpp:137] Memory required for data: 3480 I0314 20:20:55.914156 11035 layer_factory.hpp:77] Creating layer ip2 I0314 20:20:55.914165 11035 net.cpp:84] Creating Layer ip2 I0314 20:20:55.914170 11035 net.cpp:406] ip2 <- ip1 I0314 20:20:55.914175 11035 net.cpp:380] ip2 -> ip2 I0314 20:20:55.914188 11035 net.cpp:122] Setting up ip2 I0314 20:20:55.914213 11035 net.cpp:129] Top shape: 10 2 (20) I0314 20:20:55.914217 11035 net.cpp:137] Memory required for data: 3560 I0314 20:20:55.914227 11035 layer_factory.hpp:77] Creating layer ip2_ip2_0_split I0314 20:20:55.914233 11035 net.cpp:84] Creating Layer ip2_ip2_0_split I0314 20:20:55.914237 11035 net.cpp:406] ip2_ip2_0_split <- ip2 I0314 20:20:55.914244 11035 net.cpp:380] ip2_ip2_0_split -> ip2_ip2_0_split_0 I0314 20:20:55.914252 11035 net.cpp:380] ip2_ip2_0_split -> ip2_ip2_0_split_1 I0314 20:20:55.914260 11035 net.cpp:122] Setting up ip2_ip2_0_split I0314 20:20:55.914265 11035 net.cpp:129] Top shape: 10 2 (20) I0314 20:20:55.914270 11035 net.cpp:129] Top shape: 10 2 (20) I0314 20:20:55.914273 11035 net.cpp:137] Memory required for data: 3720 I0314 20:20:55.914278 11035 layer_factory.hpp:77] Creating layer accuracy I0314 20:20:55.914285 11035 net.cpp:84] Creating Layer accuracy I0314 20:20:55.914289 11035 net.cpp:406] accuracy <- ip2_ip2_0_split_0 I0314 20:20:55.914294 11035 net.cpp:406] accuracy <- label_data_1_split_0 I0314 20:20:55.914300 11035 net.cpp:380] accuracy -> accuracy I0314 20:20:55.914309 11035 net.cpp:122] Setting up accuracy I0314 20:20:55.914315 11035 net.cpp:129] Top shape: (1) I0314 20:20:55.914319 11035 net.cpp:137] Memory required for data: 3724 I0314 20:20:55.914324 11035 layer_factory.hpp:77] Creating layer loss I0314 20:20:55.914330 11035 net.cpp:84] Creating Layer loss I0314 20:20:55.914335 11035 net.cpp:406] loss <- ip2_ip2_0_split_1 I0314 20:20:55.914340 11035 net.cpp:406] loss <- label_data_1_split_1 I0314 20:20:55.914346 11035 net.cpp:380] loss -> loss I0314 20:20:55.914355 11035 layer_factory.hpp:77] Creating layer loss I0314 20:20:55.914369 11035 net.cpp:122] Setting up loss I0314 20:20:55.914376 11035 net.cpp:129] Top shape: (1) I0314 20:20:55.914378 11035 net.cpp:132] with loss weight 1 I0314 20:20:55.914394 11035 net.cpp:137] Memory required for data: 3728 I0314 20:20:55.914399 11035 net.cpp:198] loss needs backward computation. I0314 20:20:55.914407 11035 net.cpp:200] accuracy does not need backward computation. I0314 20:20:55.914412 11035 net.cpp:198] ip2_ip2_0_split needs backward computation. I0314 20:20:55.914417 11035 net.cpp:198] ip2 needs backward computation. I0314 20:20:55.914422 11035 net.cpp:198] relu1 needs backward computation. I0314 20:20:55.914425 11035 net.cpp:198] ip1 needs backward computation. I0314 20:20:55.914430 11035 net.cpp:200] label_data_1_split does not need backward computation. I0314 20:20:55.914435 11035 net.cpp:200] data does not need backward computation. I0314 20:20:55.914439 11035 net.cpp:242] This network produces output accuracy I0314 20:20:55.914444 11035 net.cpp:242] This network produces output loss I0314 20:20:55.914454 11035 net.cpp:255] Network initialization done. I0314 20:20:55.914539 11035 solver.cpp:190] Creating test net (#0) specified by test_net file: examples/hdf5_classification/nonlinear_auto_test.prototxt I0314 20:20:55.914587 11035 net.cpp:51] Initializing net from parameters: state {phase: TEST } layer {name: "data"type: "HDF5Data"top: "data"top: "label"hdf5_data_param {source: "examples/hdf5_classification/data/test.txt"batch_size: 10} } layer {name: "ip1"type: "InnerProduct"bottom: "data"top: "ip1"inner_product_param {num_output: 40weight_filler {type: "xavier"}} } layer {name: "relu1"type: "ReLU"bottom: "ip1"top: "ip1" } layer {name: "ip2"type: "InnerProduct"bottom: "ip1"top: "ip2"inner_product_param {num_output: 2weight_filler {type: "xavier"}} } layer {name: "accuracy"type: "Accuracy"bottom: "ip2"bottom: "label"top: "accuracy" } layer {name: "loss"type: "SoftmaxWithLoss"bottom: "ip2"bottom: "label"top: "loss" } I0314 20:20:55.914672 11035 layer_factory.hpp:77] Creating layer data I0314 20:20:55.914700 11035 net.cpp:84] Creating Layer data I0314 20:20:55.914706 11035 net.cpp:380] data -> data I0314 20:20:55.914716 11035 net.cpp:380] data -> label I0314 20:20:55.914741 11035 hdf5_data_layer.cpp:80] Loading list of HDF5 filenames from: examples/hdf5_classification/data/test.txt I0314 20:20:55.914759 11035 hdf5_data_layer.cpp:94] Number of HDF5 files: 1 I0314 20:20:55.916326 11035 net.cpp:122] Setting up data I0314 20:20:55.916354 11035 net.cpp:129] Top shape: 10 4 (40) I0314 20:20:55.916359 11035 net.cpp:129] Top shape: 10 (10) I0314 20:20:55.916363 11035 net.cpp:137] Memory required for data: 200 I0314 20:20:55.916368 11035 layer_factory.hpp:77] Creating layer label_data_1_split I0314 20:20:55.916379 11035 net.cpp:84] Creating Layer label_data_1_split I0314 20:20:55.916383 11035 net.cpp:406] label_data_1_split <- label I0314 20:20:55.916389 11035 net.cpp:380] label_data_1_split -> label_data_1_split_0 I0314 20:20:55.916398 11035 net.cpp:380] label_data_1_split -> label_data_1_split_1 I0314 20:20:55.916404 11035 net.cpp:122] Setting up label_data_1_split I0314 20:20:55.916410 11035 net.cpp:129] Top shape: 10 (10) I0314 20:20:55.916417 11035 net.cpp:129] Top shape: 10 (10) I0314 20:20:55.916421 11035 net.cpp:137] Memory required for data: 280 I0314 20:20:55.916427 11035 layer_factory.hpp:77] Creating layer ip1 I0314 20:20:55.916437 11035 net.cpp:84] Creating Layer ip1 I0314 20:20:55.916441 11035 net.cpp:406] ip1 <- data I0314 20:20:55.916448 11035 net.cpp:380] ip1 -> ip1 I0314 20:20:55.916466 11035 net.cpp:122] Setting up ip1 I0314 20:20:55.916473 11035 net.cpp:129] Top shape: 10 40 (400) I0314 20:20:55.916476 11035 net.cpp:137] Memory required for data: 1880 I0314 20:20:55.916487 11035 layer_factory.hpp:77] Creating layer relu1 I0314 20:20:55.916494 11035 net.cpp:84] Creating Layer relu1 I0314 20:20:55.916498 11035 net.cpp:406] relu1 <- ip1 I0314 20:20:55.916504 11035 net.cpp:367] relu1 -> ip1 (in-place) I0314 20:20:55.916510 11035 net.cpp:122] Setting up relu1 I0314 20:20:55.916515 11035 net.cpp:129] Top shape: 10 40 (400) I0314 20:20:55.916518 11035 net.cpp:137] Memory required for data: 3480 I0314 20:20:55.916523 11035 layer_factory.hpp:77] Creating layer ip2 I0314 20:20:55.916529 11035 net.cpp:84] Creating Layer ip2 I0314 20:20:55.916533 11035 net.cpp:406] ip2 <- ip1 I0314 20:20:55.916539 11035 net.cpp:380] ip2 -> ip2 I0314 20:20:55.916549 11035 net.cpp:122] Setting up ip2 I0314 20:20:55.916555 11035 net.cpp:129] Top shape: 10 2 (20) I0314 20:20:55.916558 11035 net.cpp:137] Memory required for data: 3560 I0314 20:20:55.916566 11035 layer_factory.hpp:77] Creating layer ip2_ip2_0_split I0314 20:20:55.916573 11035 net.cpp:84] Creating Layer ip2_ip2_0_split I0314 20:20:55.916575 11035 net.cpp:406] ip2_ip2_0_split <- ip2 I0314 20:20:55.916581 11035 net.cpp:380] ip2_ip2_0_split -> ip2_ip2_0_split_0 I0314 20:20:55.916589 11035 net.cpp:380] ip2_ip2_0_split -> ip2_ip2_0_split_1 I0314 20:20:55.916595 11035 net.cpp:122] Setting up ip2_ip2_0_split I0314 20:20:55.916600 11035 net.cpp:129] Top shape: 10 2 (20) I0314 20:20:55.916605 11035 net.cpp:129] Top shape: 10 2 (20) I0314 20:20:55.916609 11035 net.cpp:137] Memory required for data: 3720 I0314 20:20:55.916613 11035 layer_factory.hpp:77] Creating layer accuracy I0314 20:20:55.916620 11035 net.cpp:84] Creating Layer accuracy I0314 20:20:55.916623 11035 net.cpp:406] accuracy <- ip2_ip2_0_split_0 I0314 20:20:55.916628 11035 net.cpp:406] accuracy <- label_data_1_split_0 I0314 20:20:55.916635 11035 net.cpp:380] accuracy -> accuracy I0314 20:20:55.916642 11035 net.cpp:122] Setting up accuracy I0314 20:20:55.916647 11035 net.cpp:129] Top shape: (1) I0314 20:20:55.916651 11035 net.cpp:137] Memory required for data: 3724 I0314 20:20:55.916656 11035 layer_factory.hpp:77] Creating layer loss I0314 20:20:55.916661 11035 net.cpp:84] Creating Layer loss I0314 20:20:55.916666 11035 net.cpp:406] loss <- ip2_ip2_0_split_1 I0314 20:20:55.916671 11035 net.cpp:406] loss <- label_data_1_split_1 I0314 20:20:55.916676 11035 net.cpp:380] loss -> loss I0314 20:20:55.916683 11035 layer_factory.hpp:77] Creating layer loss I0314 20:20:55.916694 11035 net.cpp:122] Setting up loss I0314 20:20:55.916699 11035 net.cpp:129] Top shape: (1) I0314 20:20:55.916721 11035 net.cpp:132] with loss weight 1 I0314 20:20:55.916733 11035 net.cpp:137] Memory required for data: 3728 I0314 20:20:55.916738 11035 net.cpp:198] loss needs backward computation. I0314 20:20:55.916743 11035 net.cpp:200] accuracy does not need backward computation. I0314 20:20:55.916749 11035 net.cpp:198] ip2_ip2_0_split needs backward computation. I0314 20:20:55.916752 11035 net.cpp:198] ip2 needs backward computation. I0314 20:20:55.916756 11035 net.cpp:198] relu1 needs backward computation. I0314 20:20:55.916760 11035 net.cpp:198] ip1 needs backward computation. I0314 20:20:55.916765 11035 net.cpp:200] label_data_1_split does not need backward computation. I0314 20:20:55.916770 11035 net.cpp:200] data does not need backward computation. I0314 20:20:55.916774 11035 net.cpp:242] This network produces output accuracy I0314 20:20:55.916779 11035 net.cpp:242] This network produces output loss I0314 20:20:55.916790 11035 net.cpp:255] Network initialization done. I0314 20:20:55.916816 11035 solver.cpp:57] Solver scaffolding done. I0314 20:20:55.916831 11035 caffe.cpp:239] Starting Optimization I0314 20:20:55.916836 11035 solver.cpp:293] Solving I0314 20:20:55.916839 11035 solver.cpp:294] Learning Rate Policy: step I0314 20:20:55.916855 11035 solver.cpp:351] Iteration 0, Testing net (#0) I0314 20:20:55.919618 11035 solver.cpp:418] Test net output #0: accuracy = 0.4108 I0314 20:20:55.919648 11035 solver.cpp:418] Test net output #1: loss = 0.855203 (* 1 = 0.855203 loss) I0314 20:20:55.919705 11035 solver.cpp:239] Iteration 0 (-5.64912e-35 iter/s, 0.002s/1000 iters), loss = 0.722532 I0314 20:20:55.919716 11035 solver.cpp:258] Train net output #0: accuracy = 0.5 I0314 20:20:55.919725 11035 solver.cpp:258] Train net output #1: loss = 0.722532 (* 1 = 0.722532 loss) I0314 20:20:55.919735 11035 sgd_solver.cpp:112] Iteration 0, lr = 0.01 I0314 20:20:55.936062 11035 solver.cpp:351] Iteration 1000, Testing net (#0) I0314 20:20:55.939965 11035 solver.cpp:418] Test net output #0: accuracy = 0.8032 I0314 20:20:55.940037 11035 solver.cpp:418] Test net output #1: loss = 0.438563 (* 1 = 0.438563 loss) I0314 20:20:55.940106 11035 solver.cpp:239] Iteration 1000 (50000 iter/s, 0.02s/1000 iters), loss = 0.264288 I0314 20:20:55.940132 11035 solver.cpp:258] Train net output #0: accuracy = 0.9 I0314 20:20:55.940150 11035 solver.cpp:258] Train net output #1: loss = 0.264287 (* 1 = 0.264287 loss) I0314 20:20:55.940163 11035 sgd_solver.cpp:112] Iteration 1000, lr = 0.01 I0314 20:20:55.959853 11035 solver.cpp:351] Iteration 2000, Testing net (#0) I0314 20:20:55.963670 11035 solver.cpp:418] Test net output #0: accuracy = 0.8168 I0314 20:20:55.963881 11035 solver.cpp:418] Test net output #1: loss = 0.424416 (* 1 = 0.424416 loss) I0314 20:20:55.964099 11035 solver.cpp:239] Iteration 2000 (43478.3 iter/s, 0.023s/1000 iters), loss = 0.353603 I0314 20:20:55.964164 11035 solver.cpp:258] Train net output #0: accuracy = 0.9 I0314 20:20:55.964211 11035 solver.cpp:258] Train net output #1: loss = 0.353603 (* 1 = 0.353603 loss) I0314 20:20:55.964269 11035 sgd_solver.cpp:112] Iteration 2000, lr = 0.01 I0314 20:20:55.980206 11035 solver.cpp:351] Iteration 3000, Testing net (#0) I0314 20:20:55.982419 11035 solver.cpp:418] Test net output #0: accuracy = 0.8248 I0314 20:20:55.982451 11035 solver.cpp:418] Test net output #1: loss = 0.406504 (* 1 = 0.406504 loss) I0314 20:20:55.982494 11035 solver.cpp:239] Iteration 3000 (55555.6 iter/s, 0.018s/1000 iters), loss = 0.443583 I0314 20:20:55.982506 11035 solver.cpp:258] Train net output #0: accuracy = 0.8 I0314 20:20:55.982514 11035 solver.cpp:258] Train net output #1: loss = 0.443583 (* 1 = 0.443583 loss) I0314 20:20:55.982520 11035 sgd_solver.cpp:112] Iteration 3000, lr = 0.01 I0314 20:20:56.006434 11035 solver.cpp:351] Iteration 4000, Testing net (#0) I0314 20:20:56.008671 11035 solver.cpp:418] Test net output #0: accuracy = 0.824 I0314 20:20:56.008695 11035 solver.cpp:418] Test net output #1: loss = 0.393197 (* 1 = 0.393197 loss) I0314 20:20:56.008750 11035 solver.cpp:239] Iteration 4000 (38461.5 iter/s, 0.026s/1000 iters), loss = 0.188689 I0314 20:20:56.008761 11035 solver.cpp:258] Train net output #0: accuracy = 1 I0314 20:20:56.008767 11035 solver.cpp:258] Train net output #1: loss = 0.188689 (* 1 = 0.188689 loss) I0314 20:20:56.008772 11035 sgd_solver.cpp:112] Iteration 4000, lr = 0.01 I0314 20:20:56.022996 11035 solver.cpp:351] Iteration 5000, Testing net (#0) I0314 20:20:56.027575 11035 solver.cpp:418] Test net output #0: accuracy = 0.818 I0314 20:20:56.027643 11035 solver.cpp:418] Test net output #1: loss = 0.414865 (* 1 = 0.414865 loss) I0314 20:20:56.027710 11035 solver.cpp:239] Iteration 5000 (55555.6 iter/s, 0.018s/1000 iters), loss = 0.329345 I0314 20:20:56.027729 11035 solver.cpp:258] Train net output #0: accuracy = 0.9 I0314 20:20:56.027740 11035 solver.cpp:258] Train net output #1: loss = 0.329345 (* 1 = 0.329345 loss) I0314 20:20:56.027751 11035 sgd_solver.cpp:112] Iteration 5000, lr = 0.001 I0314 20:20:56.049803 11035 solver.cpp:351] Iteration 6000, Testing net (#0) I0314 20:20:56.052284 11035 solver.cpp:418] Test net output #0: accuracy = 0.8316 I0314 20:20:56.052378 11035 solver.cpp:418] Test net output #1: loss = 0.387805 (* 1 = 0.387805 loss) I0314 20:20:56.052443 11035 solver.cpp:239] Iteration 6000 (41666.7 iter/s, 0.024s/1000 iters), loss = 0.413111 I0314 20:20:56.052459 11035 solver.cpp:258] Train net output #0: accuracy = 0.8 I0314 20:20:56.052469 11035 solver.cpp:258] Train net output #1: loss = 0.413112 (* 1 = 0.413112 loss) I0314 20:20:56.052479 11035 sgd_solver.cpp:112] Iteration 6000, lr = 0.001 I0314 20:20:56.069612 11035 solver.cpp:351] Iteration 7000, Testing net (#0) I0314 20:20:56.072029 11035 solver.cpp:418] Test net output #0: accuracy = 0.8328 I0314 20:20:56.072068 11035 solver.cpp:418] Test net output #1: loss = 0.385674 (* 1 = 0.385674 loss) I0314 20:20:56.072096 11035 solver.cpp:239] Iteration 7000 (52631.6 iter/s, 0.019s/1000 iters), loss = 0.200515 I0314 20:20:56.072106 11035 solver.cpp:258] Train net output #0: accuracy = 0.9 I0314 20:20:56.072114 11035 solver.cpp:258] Train net output #1: loss = 0.200516 (* 1 = 0.200516 loss) I0314 20:20:56.072119 11035 sgd_solver.cpp:112] Iteration 7000, lr = 0.001 I0314 20:20:56.086441 11035 solver.cpp:351] Iteration 8000, Testing net (#0) I0314 20:20:56.088604 11035 solver.cpp:418] Test net output #0: accuracy = 0.828 I0314 20:20:56.088636 11035 solver.cpp:418] Test net output #1: loss = 0.390957 (* 1 = 0.390957 loss) I0314 20:20:56.088660 11035 solver.cpp:239] Iteration 8000 (62500 iter/s, 0.016s/1000 iters), loss = 0.283519 I0314 20:20:56.088670 11035 solver.cpp:258] Train net output #0: accuracy = 0.9 I0314 20:20:56.088675 11035 solver.cpp:258] Train net output #1: loss = 0.28352 (* 1 = 0.28352 loss) I0314 20:20:56.088680 11035 sgd_solver.cpp:112] Iteration 8000, lr = 0.001 I0314 20:20:56.102646 11035 solver.cpp:351] Iteration 9000, Testing net (#0) I0314 20:20:56.104756 11035 solver.cpp:418] Test net output #0: accuracy = 0.8336 I0314 20:20:56.104782 11035 solver.cpp:418] Test net output #1: loss = 0.385762 (* 1 = 0.385762 loss) I0314 20:20:56.104802 11035 solver.cpp:239] Iteration 9000 (62500 iter/s, 0.016s/1000 iters), loss = 0.406498 I0314 20:20:56.104811 11035 solver.cpp:258] Train net output #0: accuracy = 0.9 I0314 20:20:56.104816 11035 solver.cpp:258] Train net output #1: loss = 0.406498 (* 1 = 0.406498 loss) I0314 20:20:56.104820 11035 sgd_solver.cpp:112] Iteration 9000, lr = 0.001 I0314 20:20:56.122784 11035 solver.cpp:468] Snapshotting to binary proto file examples/hdf5_classification/data/train_iter_10000.caffemodel I0314 20:20:56.123262 11035 sgd_solver.cpp:280] Snapshotting solver state to binary proto file examples/hdf5_classification/data/train_iter_10000.solverstate I0314 20:20:56.123457 11035 solver.cpp:331] Iteration 10000, loss = 0.193391 I0314 20:20:56.123478 11035 solver.cpp:351] Iteration 10000, Testing net (#0) I0314 20:20:56.126117 11035 solver.cpp:418] Test net output #0: accuracy = 0.832 I0314 20:20:56.126152 11035 solver.cpp:418] Test net output #1: loss = 0.383889 (* 1 = 0.383889 loss) I0314 20:20:56.126158 11035 solver.cpp:336] Optimization Done. I0314 20:20:56.126163 11035 caffe.cpp:250] Optimization Done. # Clean up (comment this out if you want to examine the hdf5_classification/data directory). shutil.rmtree(dirname)

總結(jié)

以上是生活随笔為你收集整理的Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。