Matlab实现图像识别(九)

随机挑选50个物体,每个物体挑选20张图片。

imgs, labels = img_pick(path)


其中,imgs为50*20*28*28,label就是50*101了,那么,预处理就在img_pick中做。

function [imgs, labels] = img_pick(path)
    imgs = zeros(50, 20, 28, 28);
    labels=zeros(50, 101);
    namelist = dir(path);
    for i = 1:50 % 挑出50个物体
        k = rand(101); % 随机选择一个物体
        if namelist(k).name == '.',continue,end
        labels(i,k) = 1; % 标签设置
        imglist = dir(strcat(path,'\',namelist(k).name));
        len = length(imglist);
        for j = 1:20 % 挑选20个图像
            t = rand(len); % 随机选择一个图像
            if imglist(t).name == '.',continue,end
            img = imread(strcat(path,'\',namelist(k).name,'\',imglist(t).name));
            img = img_preprocess(img);
            imgs(i, j) = img;
        end
    end
end
function img = img_preprocess(img)
    img = img_preprocess(img);     % 预处理
    img = rgb2gray(img);           % 灰度化
    img = imresize(img, [28, 28]); % 宽高固定化
    img = im2double(img);          % 转换成输入层
end

那么主代码就非常简单了:


下面看一下CNN_train,在这里呢,我使用了一层卷积,一层池化,两层隐藏层,用两层隐藏层的原因不是为了精度更高 ,而是为了我想学习一下深度网络的那些知识。
 

w0 = rand(9, 9);     % 卷积层参数w
w1 = rand(784, 784); % 隐藏层参数w
w2 = rand(101, 1);   % 输出层参数w
% 训练代码
path = 'train_set';
for i = 1:10000 % 训练一万次
    imgs, labels = img_pick(path, 50, 20);
    w0, w1, w2 = CNN_train(w0, w1, w2, imgs, labels);
end


很简单了是吧,采用了小批量更新的方法,然后具体的训练被隐藏起来了,只要得出那些参数就足够 ,下面是测试代码:

% 测试代码
path = 'test_set';
res = 0;
for i = 1:1000 % 测试1000次
    imgs, labels = img_pick(path, 20, 5);  % 每次挑选20个物体,每个物体5张照片
    res = res + CNN_test(imgs, labels);
end
res/1000

至此,大致的都已经讲完了,下面就来讲CNN_train和CNN_test里面的内容。












 

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值