/*tiny-cnn训练*/
//#pragma warning(disable : 4996)
#include <iostream>
#include "tiny_cnn/tiny_cnn.h"
#include <opencv2/opencv.hpp>
#include<strstream>
using namespace std;
using namespace cv;
using namespace tiny_cnn;
using namespace tiny_cnn::activation;
//**********************************************************************************//
//定义全局变量
const int TRNUM = 200; //训练样本的个数
const int TENUM = 50; //测试样本的个数
const int C = 10; //分类的个数
//**********************************************************************************//
//定义网络结构
void construct_net(network<mse, adagrad>& nn) {
// connection table [Y.Lecun, 1998 Table.1]
#define O true
#define X false
static const bool tbl[] = {
O, X, X, X, O, O, O, X, X, O, O, O, O, X, O, O,
O, O, X, X, X, O, O, O, X, X, O, O, O, O, X, O,
O, O, O, X, X, X, O, O, O, X, X, O, X, O, O, O,
X, O, O, O, X, X, O, O, O, O, X, X, O, X, O, O,
X, X, O, O, O, X, X, O, O, O, O, X, O, O, X, O,
X, X, X, O, O, O, X, X, O, O, O, O, X, O, O, O
};
#undef O
#undef X
// construct nets
nn << convolutional_layer<tan_h>(32, 32, 5, 1, 6) // C1, 1@32x32-in, 6@28x28-out
<< average_pooling_layer<tan_h>(28, 28, 6, 2) // S2, 6@28x28-in, 6@14x14-out
<< convolutional_layer<tan_h>(14, 14, 5, 6, 16,
connection_table(tbl, 6, 16)) // C3, 6@14x14-in, 16@10x10-in
<< average_pooling_layer<tan_h>(10, 10, 16, 2) // S4, 16@10x10-in, 16@5x5-out
<< convolutional_layer<tan_h>(5, 5, 5, 16, 120) // C5, 16@5x5-in, 120@1x1-out
<< fully_connected_layer<tan_h>(120, C); // F6, 120-in, 10-out
}
//**********************************************************************************//
// convert image to vec_t
void convert_image(const string& imagefilename, double scale, int w, int h, std::vector<vec_t>& data)
{
auto img = imread(imagefilename, IMREAD_GRAYSCALE);
if (img.data == nullptr) return; // cannot open, or it's not an image
//imshow("img", img);
//cvWaitKey(0);
cv::Mat_<uint8_t> resized;
cv::resize(img, resized, cv::Size(w, h));
vec_t d;
std::transform(resized.begin(), resized.end(), std::back_inserter(d),
[=](uint8_t c) { return c * scale; });
data.push_back(d);
}
//int 转换string
string int2string(int&i){
strstream ss; string str;
ss << i; ss >> str;
return str;
}
int main() {
//【第一步】定义网络结构 specify loss-function and learning strategy
std::cout << "load models..." << std::endl;
network<mse, adagrad> nn;
construct_net(nn);
//**********************************************************************************//
//【第二步】加载数据
//加载训练数据
std::vector<label_t> train_labels, test_labels;
std::vector<vec_t> train_images, test_images;
for (int i = 1; i <= TRNUM; i++){
string str0 = int2string(i);
string trainpath = "./tiny_cnn/train0/num (" + str0 + ").jpg"; //训练集路径
//转换图像格式
convert_image(trainpath, 1.0, 32, 32, train_images);
}
cout << "cout << train_images.size():" << train_images.size() << endl;
//加载训练数据
for (int i = 1; i <= TENUM; i++){
string str1 = int2string(i);
string testpath = "./tiny_cnn/val0/num (" + str1 + ").bmp"; //测试集路径
convert_image(testpath, 1.0, 32, 32, test_images);
}
cout << "cout << test_images.size():" << test_images.size() << endl;
//**********************************************************************************//
//【第三步】加载标签 手工添加 标签从0开始
printf("加载训练集标签\n");
int Ci; //每一类训练样本的个数
for (size_t k = 0; k < C; k++){ // C 分类的个数
printf("第i类样本的个数:"); scanf("%d", &Ci);
for (size_t j = 1; j <= Ci; j++){
train_labels.push_back((label_t)k);
}
}
cout << "train_labels" << train_labels.size() << endl;
printf("/加载测试集标签\n");
int Ti; //每一类测试样本的个数
for (size_t k = 0; k < C; k++){ // C 分类的个数
printf("第i类样本的个数:"); scanf("%d", &Ti);
for (size_t j = 1; j <= Ti; j++){
test_labels.push_back((label_t)k);
}
}
cout << "test_labels" << test_labels.size() << endl;
//**********************************************************************************//
//【第四步】训练
std::cout << "start training" << std::endl;
progress_display disp(train_images.size());//进度显示,初始化对象disp
timer t;
int minibatch_size = 10;
int num_epochs = 30; //迭代次数
nn.optimizer().alpha *= std::sqrt(minibatch_size);
// create callback
auto on_enumerate_epoch = [&](){
std::cout << t.elapsed() << "s elapsed." << std::endl;
tiny_cnn::result res = nn.test(test_images, test_labels);
std::cout << res.num_success << "/" << res.num_total << std::endl;
disp.restart(train_images.size());
t.restart();
};
auto on_enumerate_minibatch = [&](){
disp += minibatch_size;
};
// training
nn.train(train_images, //训练数据
train_labels, //标签
minibatch_size,
num_epochs,
on_enumerate_minibatch,
on_enumerate_epoch);
std::cout << "end training." << std::endl;
// test and show results
nn.test(test_images, test_labels).print_detail(std::cout);
// 保存训练好的分类器
std::ofstream ofs("LeNet-weights");
ofs << nn;
system("pause");
}
没有合适的资源?快使用搜索试试~ 我知道了~
tiny_cnn.rar_CNN C_tiny-cnn_深度学习 图像
共419个文件
jpg:301个
bmp:50个
h:33个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 184 浏览量
2022-07-15
05:52:02
上传
评论
收藏 7.34MB RAR 举报
温馨提示
Tiny_cnn是一个简洁的纯C++11实现的深度学习框架,本人用的是VS2013+opencv2.4.13。用自己的数据训练和测试tiny_cnn,只需自己准备好训练数据train与测试数据val0\val1。把训练图像放到一个文件夹下,如文件夹train,把所有的图像直接批量重命名,但要保证每一类图像是连续存放的。
资源推荐
资源详情
资源评论
收起资源包目录
tiny_cnn.rar_CNN C_tiny-cnn_深度学习 图像 (419个子文件)
num (50).bmp 2KB
num (37).bmp 2KB
num (19).bmp 2KB
num (28).bmp 2KB
num (21).bmp 2KB
num (20).bmp 2KB
num (8).bmp 2KB
num (33).bmp 2KB
num (43).bmp 2KB
num (36).bmp 2KB
num (45).bmp 2KB
num (29).bmp 2KB
num (32).bmp 2KB
num (44).bmp 2KB
num (26).bmp 2KB
num (9).bmp 2KB
num (7).bmp 2KB
num (39).bmp 2KB
num (40).bmp 2KB
num (15).bmp 2KB
num (42).bmp 2KB
num (41).bmp 2KB
num (12).bmp 2KB
num (10).bmp 2KB
num (38).bmp 2KB
num (34).bmp 2KB
num (11).bmp 2KB
num (22).bmp 2KB
num (1).bmp 2KB
num (4).bmp 2KB
num (18).bmp 2KB
num (30).bmp 2KB
num (46).bmp 2KB
num (5).bmp 2KB
num (3).bmp 2KB
num (2).bmp 2KB
num (17).bmp 2KB
num (14).bmp 2KB
num (25).bmp 2KB
num (27).bmp 2KB
num (16).bmp 2KB
num (47).bmp 2KB
num (35).bmp 2KB
num (24).bmp 2KB
num (23).bmp 2KB
num (13).bmp 2KB
num (6).bmp 2KB
num (49).bmp 2KB
num (48).bmp 2KB
num (31).bmp 2KB
tiny_cnn.cpp 5KB
tiny_cnn.exe 663KB
test.exe 88KB
tiny_cnn.vcxproj.filters 949B
convolutional_layer.h 28KB
layer_factory_impl.h 26KB
network.h 20KB
layer.h 13KB
product.h 12KB
conv_kernel.h 10KB
util.h 10KB
image.h 9KB
partial_connected_layer.h 9KB
max_pooling_layer.h 8KB
optimizer.h 7KB
layer_factory.h 6KB
mnist_parser.h 6KB
fully_connected_layer.h 6KB
activation_function.h 5KB
lrn_layer.h 5KB
average_pooling_layer.h 5KB
dropout_layer.h 5KB
aligned_allocator.h 4KB
dropout.h 4KB
cifar10_parser.h 4KB
weight_init.h 4KB
layers.h 4KB
linear_layer.h 4KB
display.h 4KB
input_layer.h 3KB
loss_function.h 3KB
fully_connected_dropout_layer.h 2KB
layer_factory.h 2KB
tiny_cnn.h 2KB
config.h 2KB
nn_error.h 2KB
deform.h 2KB
vc120.idb 1.13MB
tiny_cnn.ilk 1.76MB
test.ilk 545KB
sample.jpg 135KB
num (5).jpg 1022B
num (109).jpg 1018B
num (84).jpg 1004B
num (108).jpg 997B
num (113).jpg 956B
num (112).jpg 952B
num (18).jpg 948B
num (8).jpg 937B
num (5).jpg 935B
共 419 条
- 1
- 2
- 3
- 4
- 5
资源评论
- 1e00zs2024-06-12这个资源值得下载,资源内容详细全面,与描述一致,受益匪浅。
JaniceLu
- 粉丝: 95
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功