当前位置:首页 > 智能硬件 > 人工智能AI
[导读] 摘要:本文展示了如何基于nolearn使用一些卷积层和池化层来建立一个简单的ConvNet体系结构,以及如何使用ConvNet去训练一个特征提取器,然后在使用如SVM、LogisTIc回归等不同

摘要:本文展示了如何基于nolearn使用一些卷积层和池化层来建立一个简单的ConvNet体系结构,以及如何使用ConvNet去训练一个特征提取器,然后在使用如SVM、LogisTIc回归等不同的模型之前使用它来进行特征提取。
 

卷积神经网络(ConvNets)是受生物启发的MLPs(多层感知器),它们有着不同类别的层,并且每层的工作方式与普通的MLP层也有所差异。如果你对ConvNets感兴趣,这里有个很好的教程CS231n – ConvoluTIonal Neural Newtorks for Visual RecogniTIon。CNNs的体系结构如下所示:

常规的神经网络

ConvNet网络体系结构

如你所见,ConvNets工作时伴随着3D卷积并且在不断转变着这些3D卷积。我在这篇文章中不会再重复整个CS231n的教程,所以如果你真的感兴趣,请在继续阅读之前先花点时间去学习一下。

Lasagne 和 nolearn

Lasagne和nolearn是我最喜欢使用的深度学习Python包。Lasagne是基于Theano的,所以GPU的加速将大有不同,并且其对神经网络创建的声明方法也很有帮助。nolearn库是一个神经网络软件包实用程序集(包含Lasagne),它在神经网络体系结构的创建过程上、各层的检验等都能够给我们很大的帮助。

在这篇文章中我要展示的是,如何使用一些卷积层和池化层来建立一个简单的ConvNet体系结构。我还将向你展示如何使用ConvNet去训练一个特征提取器,在使用如SVM、LogisTIc回归等不同的模型之前使用它来进行特征提取。大多数人使用的是预训练ConvNet模型,然后删除最后一个输出层,接着从ImageNets数据集上训练的ConvNets网络提取特征。这通常被称为是迁移学习,因为对于不同的问题你可以使用来自其它的ConvNets层,由于ConvNets的第一层过滤器被当做是一个边缘探测器,所以它们可以用来作为其它问题的普通特征探测器。

加载MNIST数据集

MNIST数据集是用于数字识别最传统的数据集之一。我们使用的是一个面向Python的版本,但先让我们导入需要使用的包:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from urllib import urlretrieve
import cPickle as pickle
import os
import gzip
import numpy as np
import theano
import lasagne
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet
from nolearn.lasagne import visualize
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

正如你所看到的,我们导入了用于绘图的matplotlib包,一些用于下载MNIST数据集的原生Python模块,numpy, theano,lasagne,nolearn 以及 scikit-learn库中用于模型评估的一些函数。

然后,我们定义一个加载MNIST数据集的函数(这个功能与Lasagne教程上使用的非常相似)
def load_dataset():
url = 'http://deeplearning.net/data/mnist/mnist.pkl.gz'
filename = 'mnist.pkl.gz'
if not os.path.exists(filename):
print("Downloading MNIST dataset...")
urlretrieve(url, filename)
with gzip.open(filename, 'rb') as f:
data = pickle.load(f)
X_train, y_train = data[0]
X_val, y_val = data[1]
X_test, y_test = data[2]
X_train = X_train.reshape((-1, 1, 28, 28))
X_val = X_val.reshape((-1, 1, 28, 28))
X_test = X_test.reshape((-1, 1, 28, 28))
y_train = y_train.astype(np.uint8)
y_val = y_val.astype(np.uint8)
y_test = y_test.astype(np.uint8)
return X_train, y_train, X_val, y_val, X_test, y_test

正如你看到的,我们正在下载处理过的MNIST数据集,接着把它拆分为三个不同的数据集,分别是:训练集、验证集和测试集。然后重置图像内容,为之后的Lasagne输入层做准备,与此同时,由于GPU/theano数据类型的限制,我们还把numpy的数据类型转换成了uint8。

随后,我们准备加载MNIST数据集并检验它:
X_train, y_train, X_val, y_val, X_test, y_test = load_dataset()
plt.imshow(X_train[0][0], cmap=cm.binary)

这个代码将输出下面的图像(我用的是IPython Notebook)

一个MNIST数据集的数字实例(该实例是5)

ConvNet体系结构与训练

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

车间多台PLC做数据采集,不一定要上SCADA网关。Python装好协议库后,通过以太网直连Modbus TCP、S7、Ethernet/IP,或用串口直连Modbus RTU,把寄存器、DB块、标签统一成点表,定时批量...

关键字: PLC Snap7直读S7数据块 python

在高速PCB设计领域,工程师常面临批量修改元件封装和验证设计规则的重复性工作。以某5G通信模块设计为例,其包含2000余个元件,手动替换封装需40小时,而人工DRC检查遗漏率高达15%。通过Python与Tcl脚本的二次...

关键字: python Cadence Altium

在嵌入式硬件开发中,测试环节常占据项目周期40%以上时间。本文介绍如何利用Python构建高效自动化测试框架,通过脚本驱动实现批量测试、数据采集和结果分析,将测试效率提升3-5倍,同时降低人为操作误差。

关键字: 嵌入式硬件 测试自动化 python

视频Transformer模型在视频理解、动作识别等任务中展现出强大性能,然而其高计算复杂度和内存消耗限制了实际应用。为解决这一问题,本文从算法和硬件层面出发,探讨视频Transformer模型的稀疏化加速方法,包括算法...

关键字: Transformer模型 python

在FPGA工具的软件世界中,用于在FPGA上开发设计的ide似乎每年都在加速,我在这里使用“加速”是一个双关语。这就意味着不缺少安装技巧和技巧。所以我在这里再次使用AMD FPGA工具版本2024.2,因为我在这个安装过...

关键字: FPGA Linux python

在本教程中,我们将指导您使用BleuIO USB BLE加密狗创建一个BLE实时macOS菜单栏应用程序。BleuIO是一个非常通用的工具,它简化了BLE(低功耗蓝牙)应用程序的开发,使其成为希望轻松构建创新项目的开发人...

关键字: BleuIO 低功耗蓝牙 python

在当今快速发展的硬件设计领域,自动生成Verilog代码已成为提高设计效率和准确性的重要手段。Verilog作为一种广泛应用的硬件描述语言(HDL),其代码自动生成技术可以大大缩短产品开发周期,降低设计成本。本文将介绍几...

关键字: Verilog FPGA python

在Linux系统编程中,经常需要在程序中执行外部命令并获取其执行结果。无论是基于C/C++、Python、Bash脚本还是其他编程语言,都提供了相应的方法来实现这一功能。本文将以C/C++和Python为例,详细介绍如何...

关键字: Linux系统 外部命令 python

Pipenv是一款旨在将所有包管理工具的优点集中利用于python领域中的工具,兼容性高,使用Pipenv可以自动创建项目和管理虚拟环境,且安装或删除包时会自动在Pipfile中添加和移除相应的包。

关键字: python 管理工具 虚拟环境

随着大数据的兴起,Python 和机器学习迅速成为时代的宠儿。本书在内容编排上避免了枯燥的理论知识讲解,依循“理论简述——实际数据集——Python 程序实现算法”分析数据的思路。

关键字: python 机器学习 数据集
关闭