【Lasagne速成】Lasagne/Theano图像分类从模型自定义到测试

Lasagne 实现并测试MNIST 一般来说,按照教程将Lasagne配置完成就会带有example,如果没有的话,可以去Lasagne的Github下载。其中Lasagne的官方文档有部分本文代码的英文讲解。暂时先贴一段代码,要慢慢填坑。""" Usage example employing Lasagne for digit recognition using the MNIST dataset. This example is 阅读详情

欢迎来到专栏《2小时玩转开源框架系列》,这是我们第11篇,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer,deeplearning4j,matconvnet。

今天说Lasagne,本文所用到的数据,代码请参考我们官方git

https://github.com/longpeng2008/LongPeng_ML_Course

作者&编辑 | 言有三

 

1 Lasagne是什么

说了这么久的开源框架,我们好像一直忘了一个很老牌的框架,就是theano对不对,在2008年的时候,这个框架就由Yoshua Bengio领导的蒙特利尔LISA组开源了。

一直没说theano是因为它的使用成本真的有点高,需要从底层开始写代码构建模型,不过今天说的这个是封装了theano的高层框架,即Lasagen,它使得theano使用起来更简单。

官网地址:http://lasagne.readthedocs.io/en/latest/index.html

GitHub: https://github.com/Lasagne/Lasagne

 

2 Lasagne训练准备

2.1 Lasagne安装

Lasagne安装很简单,只需要在终端输入下面命令即可安装:

pip install Lasagne

2.2 数据读取

由于没有特别好的接口,因此我们自己定义一个类就行了,实现从数据集中读取,以及产生list,格式就是每一个类存在一个单独的文件夹下,主体代码如下。

class Dataset:

    def __init__(self, rootpath, imgwidth, imgheight, trainratio=0.9):

        self.rootpath = rootpath

        list_dirs = os.walk(self.rootpath)

        count = 0

        numofclasses = 0

        self.subdirs = []

        ##遍历文件夹

        for root, dirs, files in list_dirs:

            for d in dirs:

                self.subdirs.append(os.path.join(root,d))

        label = 0

        self.imagedatas = []

        self.labeldatas = []

        for subdir in self.subdirs:

            images = glob.iglob(os.path.join(subdir,'*.jpg'))

            for image in images: 

                  imagedata = cv2.imread(image,1)

                  imagedata = cv2.resize(imagedata,(imgwidth,imgheight))

                  imagedata = imagedata.astype(np.float) / 255.0

                  imagedata = imagedata - [0.5,0.5,0.5]

                  imagedata = imagedata.transpose((2,0,1))

        self.imagedatas.append(imagedata)

        self.labeldatas.append(label)

        label = label + 1

        self.imagedatas = np.array(self.imagedatas).astype(np.float32)

        self.labeldatas = np.array(self.labeldatas).astype(np.int32)

        indices = np.arange(len(self.imagedatas))

        np.random.shuffle(indices)

        splitindex = int(trainratio*self.imagedatas.shape[0])

        self.imagetraindatas = self.imagedatas[0:splitindex].copy()

        self.labeltraindatas = self.labeldatas[0:splitindex].copy()

        self.imagevaldatas = self.imagedatas[splitindex:].copy()   

        self.labelvaldatas = self.labeldatas[splitindex:].copy()   

    ##定义数据迭代接口

    def iterate_minibatches(self, inputs, targets, batchsize, shuffle=False):

        assert len(inputs) == len(targets)

        if shuffle:

            indices = np.arange(len(inputs))

            print "indices type=",type(indices)

            np.random.shuffle(indices)

        for start_idx in range(0, len(inputs) - batchsize + 1, batchsize):

            if shuffle:

                excerpt = indices[start_idx:start_idx + batchsize]

            else:

                excerpt = slice(start_idx, start_idx + batchsize)

            yield inputs[excerpt], targets[excerpt]

以上就实现了将一个数据集下的不同子文件夹的图片随机分成了训练集和测试集,并提供了统一的接口。当然这里只做了最简单的数据预处理而没有做数据增强,这就留待读者自己去完成了。

2.3 网络定义

基本上和所有python库的方法是一样的,调用接口就行。

def simpleconv3(input_var=None):

    network = lasagne.layers.InputLayer(shape=(None, 3, 48, 48),

                                        input_var=input_var)

    network = lasagne.layers.Conv2DLayer(

            network, num_filters=12, filter_size=(3, 3),

            nonlinearity=lasagne.nonlinearities.rectify,

            W=lasagne.init.GlorotUniform())

    network = batch_norm(network)

    network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2))

    network = lasagne.layers.Conv2DLayer(

            network, num_filters=24, filter_size=(3, 3),

            nonlinearity=lasagne.nonlinearities.rectify,

            W=lasagne.init.GlorotUniform())

    network = batch_norm(network)

    network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2))

    network = lasagne.layers.Conv2DLayer(

            network, num_filters=48, filter_size=(3, 3),

            nonlinearity=lasagne.nonlinearities.rectify,

            W=lasagne.init.GlorotUniform())

    network = batch_norm(network)

    network = lasagne.layers.MaxPool2DLayer(network, pool_size=(2, 2))

    network = lasagne.layers.DenseLayer(

            lasagne.layers.dropout(network, p=.5),

            num_units=128,

            nonlinearity=lasagne.nonlinearities.rectify)

    network = lasagne.layers.DenseLayer(

            lasagne.layers.dropout(network, p=.5),

            num_units=2,

            nonlinearity=lasagne.nonlinearities.softmax)

    return network

以上定义的就是一个3层卷积2层全连接的网络,使用lasagne.layers接口。

 

3 模型训练

1、首先通过Theano里的tensor对输入和输出进行定义

input_var = T.tensor4('inputs')

target_var = T.ivector('targets')

inputs是一个四维的张量,targets是一个ivector变量。

2、调用lasagne.objectives里的损失函数接口:

network = simpleconv3(input_var)

prediction = lasagne.layers.get_output(network)

loss =lasagne.objectives.categorical_crossentropy(prediction, target_var)

loss = loss.mean()

network即网络模型,prediction表示它的输出,损失函数categorical_crossentropy就是交叉熵了。

验证集和测试集上的定义与此类似,只需要更改deterministic为deterministic=True,这样会屏蔽掉所有的dropout层,如下:

test_prediction = lasagne.layers.get_output(network, deterministic=True)

test_loss = lasagne.objectives.categorical_crossentropy(test_prediction, target_var)

test_loss = test_loss.mean()

接下来就是训练方法,使用nesterov_momentum法:

params = lasagne.layers.get_all_params(network, trainable=True)

updates = lasagne.updates.nesterov_momentum( loss, params, learning_rate=0.01, momentum=0.9

)

最后定义训练函数:

train_fn = theano.function([input_var, target_var], loss, updates=updates)

接收两个输入input_var, target_var,利用updates表达式更新参数。如果是用于验证和测试,就不需要进行网络参数的更新,而且可以增加精度等变量,这时这样定义:

test_acc = T.mean(T.eq(T.argmax(test_prediction, axis=1), target_var), dtype=theano.config.floatX)

val_fn = theano.function([input_var, target_var], [test_loss, test_acc])

最后,每一个epoch取得数据训练进行训练:

train_data =  mydataset.iterate_minibatches(mydataset.imagetraindatas,mydataset.labeltraindatas,16,True)

train_batches = 0

  for input_batch, target_batch in train_data:

      train_loss += train_fn(input_batch, target_batch)

      prediction = lasagne.layers.get_output(network)

      train_batches += 1

  print("Epoch %d: Train Loss %g" % (epoch + 1, train_loss / train_batches))

结果如下,老样子,测试集合精度90%,模型过拟合。

以上就是Lasagne从数据准备,模型定义到输出结果的整个流程,想要体验可以去参考git代码。

Lasagne/Theano给我最大的感觉就是慢,比至今用过的每一个框架都要慢,不过了解一下并没有坏处,毕竟Theano曾经辉煌。

本系列完整文章:

第一篇:【caffe速成】caffe图像分类从模型自定义到测试

第二篇:【tensorflow速成】Tensorflow图像分类从模型自定义到测试

第三篇:【pytorch速成】Pytorch图像分类从模型自定义到测试

第四篇:【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试

第五篇:【Keras速成】Keras图像分类从模型自定义到测试

第六篇:【mxnet速成】mxnet图像分类从模型自定义到测试

第七篇:【cntk速成】cntk图像分类从模型自定义到测试

第八篇:【chainer速成】chainer图像分类从模型自定义到测试

第九篇:【DL4J速成】Deeplearning4j图像分类从模型自定义到测试

第十篇:【MatConvnet速成】MatConvnet图像分类从模型自定义到测试

第十一篇:【Lasagne速成】Lasagne/Theano图像分类从模型自定义到测试

第十二篇:【darknet速成】Darknet图像分类从模型自定义到测试

感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注有三公众号 有三AI!

theano学习笔记 theano  一、搭建环境        安装:pip install theano==0.9.0     卸载:pip uninstall theano     查看版本号:import theano                 theano.__version__     设置gpu\cpu:         方法1:vim /root/.theanorc    阅读详情

相关推荐

深度解析minist例子(lasagne)

minist例子相当于深度学习中的'hello,world' 下面以lasagne中的minist为原型解析: 首先需要了解使用的数据集: minist数据集:共有100000张图片,每张图片大小为28X28,通道数为1,如果是彩色图片,通道数为3,图片显示为0~9手写体数字,每张图片仅包含一个数据,训练集为80000张图片,测试集为20000图片。 1.加载包: import nump

u013909139的博客 3005

python深度神经网络_从Lasagne获取输出(Python深度神经网络框架)

我从Lasagne的官方github加载了mnist_conv.py示例.在and,我想预言自己的例子.我看到“ lasagne.layers.get_output()”应该处理官方文档中的numpy数组,但这是行不通的,我不知道该怎么办.这是我的代码:if __name__ == '__main__':output_layer = main() #the output layer from th...

weixin_40002611的博客 325

同济土木非0基础三个月跨考复旦计算机攻略

跨考cs攻略前言我cs专业课如何复习How to start from zero简历其他复试 前言 建议多去工地/化工厂涡轮增压一下 我 同济土木gpa 3.2/5 挂科 * n 辣鸡项目 * n (padding 简历) 21考复旦计算机专硕 10月-12月 学习+复习 总分392 政治 68;背肖4即可 英语二 78 裸考,(高考英语140+);做点真题,建议据自己情况准备 数学二 142 ;(高考数学接近满分);做真题+模拟题,每天写一张试卷 专业课 104 ,考试生病了,下文展开。 cs专业课

piglake的博客 7238

TheBigPromptLibrary 指令拆解:Diagrams: Show Me 自定义 GPT 的图表生成端点协议与设计实践

本篇以 [TheBigPromptLibrary](https://link.gitcode.com/i/eb0f899fe0835beacdf48e8192b168d4) 仓库中收录的 "Diagrams: Show Me" 自定义 GPT 指令(CustomInstructions/ChatGPT/5QhhdsfDj_Diagrams-Show Me.md)为分析对象,逐条拆解其如何通过 `/

gitblog_00036的博客 683

从光猫到机顶盒:H10G-13融合网关双系统网络配置全解析(含超密获取技巧)

本文详细解析了中国移动H10G-13融合网关的双系统网络配置,涵盖光猫路由与安卓电视盒子的协同工作。通过晶晨S905L3芯片的优化,设备实现高效网络接入与安卓9.0系统的定制化应用,特别适合酒店和民宿行业的智能化改造。文章还提供了超密获取技巧和线刷固件包的实用指南。

weixin_42525264的博客 952

Dify如何实现自主学习

摘要:Dify通过构建感知-决策-执行-反馈的闭环实现"自主学习",本质是打造能自动获取信息、更新知识库并调整策略的Agent工作流。核心包括:1)建立知识库作为记忆体;2)搭建感知与执行工具获取实时信息;3)通过工作流编排决策"大脑",包含LLM决策节点、行动执行节点和反馈反思节点。典型应用如根据用户反馈优化回答风格,通过存储反思日志到知识库实现持续优化。这种机制使智能体能基于新数据和经验不断自我改进。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 727

Lasagne深度学习框架中的层(Layers)详解

Lasagne是一个轻量级的深度学习框架,建立在Theano之上。在Lasagne中,神经网络的基本构建块是层(Layer)。本文将深入讲解Lasagne中层的概念、创建方式以及相关操作。 ## 层的基本概念 在Lasagne中,所有层都继承自`lasagne.layers.Layer`基类。层是神经网络的基本组成单元,每个层负责特定的计算任务,如线性变换、非线性激活、卷积操作等。 ## 创...

gitblog_00718的博客 776

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2923

WOFF2字体压缩工具完全指南:从安装到高效压缩字体文件

WOFF2字体压缩工具是一款强大的字体文件压缩解决方案,能够显著减小TrueType字体文件大小,同时保持字体质量。本指南将为您提供从安装到高效使用WOFF2工具的完整流程,帮助您轻松掌握字体压缩技术。 ## 一、WOFF2工具简介 WOFF2(Web Open Font Format 2.0)是一种针对网页设计优化的字体格式,相比传统TTF/OTF格式,它能提供更高的压缩率(通常可减少30%

gitblog_00572的博客 668

[NoC]Outstanding和Credit的概念详解

摘要:本文详细解析了计算机体系结构中outstanding和credit两个核心概念。outstanding指已发出但未完成的请求数量,通过跟踪未决事务实现并发和乱序执行,常见于AXI总线等场景;credit则是基于信用令牌的流控机制,通过控制发送速率防止接收端缓冲溢出,多用于NoC网络。二者在目的、机制上存在差异:outstanding侧重提升并发度,credit关注流控保护。文章通过AXI协议实例和SystemC代码示例展示了二者的应用与结合方式,并探讨了在SoC设计中参数优化的方法,包括性能/资源权衡

元直的博客 2285

【人工智能之深度学习】18. 金融风控实战:TCN时序卷积网络构建信用卡欺诈实时检测系统

摘要:信用卡欺诈交易识别是金融风控的核心环节,其面临欺诈样本占比低(仅0.1%)、实时响应要求高(毫秒级)等挑战。本文基于IEEE-CIS公开数据集,构建基于时序卷积网络(TCN)的欺诈检测系统,通过捕捉用户交易行为的时序模式识别异常。详细阐述全流程:从数据预处理(构造交易序列特征)、TCN模型设计(轻量级架构适配实时场景),到实时检测部署(异步处理确保低延迟)。实验显示,该系统精确率达63%、召回率89%,误杀率仅0.2%,推理延迟8ms,较XGBoost等传统模型性能显著提升。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1135

python深度神经网络_从Lasagne获取输出(Python深度神经网络框架)

I loaded the mnist_conv.py example from official github of Lasagne.At the and, I would like to predict my own example. I saw that "lasagne.layers.get_output()" should handle numpy arrays from official...

weixin_39575937的博客 244

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

深度学习框架之一:Theano | Lasagne简单教程

北京 上海巡回站 | NVIDIA DLI深度学习培训2018年1月26/1月12日NVIDIA 深度学习学院 带你快速进入火热的DL领域阅读全文                                                >正文共7163个字,1张图,预计阅读时间18分钟。参考Lasagne官网(http://lasagne.readthedocs.io/en/latest/)

leadai的博客 4917

195、大模型蒸馏与压缩:知识蒸馏与VLA模型轻量化

折腾完这一整套流程,最大的感悟是:知识蒸馏不是简单的模型压缩,而是知识迁移的工程艺术。每一步都有坑,每个参数都可能影响最终性能。给后来者的建议是:先别急着上蒸馏,把teacher模型的推理延迟和显存占用测清楚,确定瓶颈在哪里——是计算量太大还是内存带宽不够,这决定了你该用蒸馏还是量化还是剪枝。蒸馏训练时一定要监控每一层的特征对齐loss,别只看总loss。如果某一层的对齐loss特别高,说明student在这一层学歪了,需要调整该层的损失权重或者增加该层的投影头容量。

sundong_81的博客 113

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

人群计数--Switching Convolutional Neural Network for Crowd Counting

Switching Convolutional Neural Network for Crowd Counting CVPR2017 Code for SCNN is based on Lasagne\Theano :https://github.com/val-iisc/crowd-counting-scnn 针对人群密度估计问题提出了一个 Switch-CNN网络,大的思路...

AI小作坊 的博客 9219

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Theano深度学习框架之Lasagne安装及入门

1、Lasagne简单介绍        lasagne意味千层饼,是基于theano之上主要用于建立和训练神经网络的深度学习库。Lasagne is a lightweight library to build and train neural networks in Theano.  网站链接:https://github.com/Lasagne/Lasagne、     lasagne官...

qikaihuting的博客 4610

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于python的Lasagne包对minist的代码解读

本例是基于python的Lasagne包中对minist数据集的卷积神经网络的代码的一个解读,其中英文部分因为怕自己理解错误,所以保留了下来;由于该部分代码主要还是基于theano进行开发,所以里面的很多函数都是借鉴或直接用了theano中的函数,要想真正理解还是需要学习一下theano,包括其中对于变量和函数设计的理念,其实都是很有意味的! theano: http://deeplearning

hzau_yang的博客 2897

Spaghetti code&Ravioli code&Lasagna code&Spaghetti with meatballs

今天在园子里面晃悠,看到了Spaghetti code——意大利面代码这个,很有意思的编程类术语,在Wikipedia中关于Spaghetti code描述的页面还发现了一个Ravioli code——小方饺代码、Lasagna code——千层面代码和Spaghetti with meatballs——意式肉丸意粉代码等这几个有意思的属于名词,以下是它们的描述: ...

weixin_30344131的博客 279

Lasagne:用来建立和训练Theano神经网络的轻量级软件库

Lasagne是一个轻量级的软件库,用来建立和训练Theano神经网络。Lasagne is a lightweight library to build and tra...

weixin_42825609的博客 493

lasagne模型参数的查看、保存和读取

先定义模型,这是一个普通的CNN模型: def build_cnn_feat_extractor(input_var=None, input_shape=(None, 3, 50, 50), n=128): assert isinstance(n, int) network = OrderedDict() network['input'] = lasagne.layers....

学渣的博客 1万+

Theano简单入门(一):Theano与Lasagne的安装

一、介绍       Theano是一个Python库,专门用于定义、优化、求值数学表达式,效率高,适用于多维数组。特别适合做机器学习。一般来说,使用时需要安装python和numpy。      首先回顾一下机器学习的东西,定义一个模型(函数)f(x;w) x为输入,w为模型参数,然后定义一个损失函数c(f),通过数据驱动在一堆模型函数中选择最优的函数就是训练training的过程,在机器学...

花梦飞的博客 1万+

python深度神经网络,从Lasagne获取输出(Python深度神经网络框架)

I loaded the mnist_conv.py example from official github of Lasagne.At the and, I would like to predict my own example. I saw that "lasagne.layers.get_output()" should handle numpy arrays from official...

weixin_42207707的博客 358

使用lasagne进行一维卷积conv1d

 具体看下面的实现,实现对多个句子进行一维卷积,并使用dandelion实现时间维度上的maxpooling。 # 学习使用lasagne 结合dandelion 进行卷积,并在时间维度上进行max pooling import lasagne import theano import numpy as np from dandelion.functional import * def con...

qq_40734559的博客 636

Lesagne入门学习

参考Lasagne官网tutorial进行总结而来。 一、简介 Lasagne is a lightweight library to build and train neural networks in Theano. Lasagen是一个基于Theano的轻量级的神经网络库。其实就是对Theano库的上层封装,使其用起来更简单,但是相应的灵活性下降。 Lasagne设计的六个原则是简洁、透明、

晴晴的博客 813

深度学习中优化方法——momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam

深度学习中优化方法 —momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam—         我们通常使用梯

天泽28的专栏 7万+
上一篇: 【darknet速成】Darknet图像分类从模型自定义到测试
下一篇: 【MatConvnet速成】MatConvnet图像分类从模型自定义到测试
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值