Copyright © 1999-2020, CSDNNET, All Rights Reserved
打开APP
lj_FLR
关注
深度学习基础14(softmax回归数据集的选择以及读取) 原创
2022-03-28 18:31:25
2点赞
lj_FLR
码龄3年
关注
图像分类数据集
MNIST数据集是图像分类中广泛使用的数据集之一,是对手写数字的识别,大概86年提出的
但作为基准数据集过于简单。
我们将使用类似但更复杂的Fashion-MNIST数据集
读取数据集
可以通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中。
Fashion-MNIST由10个类别的图像组成, 每个类别由训练数据集(train dataset)中的6000张图像 和测试数据集(test dataset)中的1000张图像组成。
因此,训练集和测试集分别包含60000和10000张图像。 测试数据集不会用于训练,只用于评估模型性能。
Scikit-learn
Scikit-learn是基于Scipy为机器学习建造的的一个Python模块,他的特色就是多样化的分类,回归和聚类的算法包括支持向量机,逻辑回归,朴素贝叶斯分类器,随机森林,GradientBoosting,聚类算法和DBSCAN。而且也设计出了Pythonnumerical和scientificlibrariesNumpyandScipy
2Pylearn2
Pylearn是一个让机器学习研究简单化的基于Theano的库程序。
3NuPIC
NuPIC是一个以HTM学习算法为工具的机器智能。HTM是皮层的精确计算方法。HTM的核心是基于时间的持续学习算法和储存和撤销的时空模式。NuPIC适合于各种各样的问题,尤其是检测异常和预测的流数据来源。
4Nilearn
Nilearn是一个能够快速统计学习神经影像数据的Python模块。它利用Python语言中的scikit-learn工具箱和一些进行预测建模,分类,解码,连通性分析的应用程序来进行多元的统计。
5PyBrain
Pybrain是基于Python语言强化学习,人工智能,神经网络库的简称。它的目标是提供灵活、容易使用并且强大的机器学习算法和进行各种各样的预定义的环境中测试来比较你的算法。
6Pattern
Pattern是Python语言下的一个网络挖掘模块。它为数据挖掘,自然语言处理,网络分析和机器学习提供工具。它支持向量空间模型、聚类、支持向量机和感知机并且用KNN分类法进行分类。
7Fuel
Fuel为你的机器学习模型提供数据。他有一个共享如MNIST,CIFAR-10(数据集),Google’sOneBillionWords(文字)这类数据集的接口。你使用他来通过很多种的方式来替代自己的数据。
8Bob
Bob是一个的信号处理和机器学习的工具。它的工具箱是用Python和C语言共同编写的,它的设计目的是变得更加高效并且减少开发时间,它是由处理图像工具,音频和处理、机器学习和模式识别的大量包构成的。
9Skdata
Skdata是机器学习和统计的数据集的库程序。这个模块对于玩具问题,流行的计算机视觉和自然语言的数据集提供标准的Python语言的使用。
10MILK
MILK是Python语言下的机器学习工具包。它主要是在很多可得到的分类比如SVMS,K-NN,随机森林,决策树中使用监督分类法。它还执行特征选择。这些分类器在许多方面相结合,可以形成不同的例如无监督学习、密切关系金传播和由MILK支持的K-means聚类等分类系统。
11IEPY
IEPY是一个专注于关系抽取的开源性信息抽取工具。它主要针对的是需要对大型数据集进行信息提取的用户和想要尝试新的算法的科学家。
12Quepy
Quepy是通过改变自然语言问题从而在数据库查询语言中进行查询的一个Python框架。他可以简单的被定义为在自然语言和数据库查询中不同类型的问题。所以,你不用编码就可以建立你自己的一个用自然语言进入你的数据库的系统。
现在Quepy提供对于Sparql和MQL查询语言的支持。并且计划将它延伸到其他的数据库查询语言。
13Hebel
Hebel是在Python语言中对于神经网络的深度学习的一个库程序,它使用的是通过PyCUDA来进行GPU和CUDA的加速。它是最重要的神经网络模型的类型的工具而且能提供一些不同的活动函数的激活功能,例如动力,涅斯捷罗夫动力,信号丢失和停止法。
14mlxtend
它是一个由有用的工具和日常数据科学任务的扩展组成的一个库程序。
15nolearn
这个程序包容纳了大量能对你完成机器学习任务有帮助的实用程序模块。其中大量的模块和scikit-learn一起工作,其它的通常更有用。
16Ramp
Ramp是一个在Python语言下制定机器学习中加快原型设计的解决方案的库程序。他是一个轻型的pandas-based机器学习中可插入的框架,它现存的Python语言下的机器学习和统计工具(比如scikit-learn,rpy2等)Ramp提供了一个简单的声明性语法探索功能从而能够快速有效地实施算法和转换。
17FeatureForge
这一系列工具通过与scikit-learn兼容的API,来创建和测试机器学习功能。
这个库程序提供了一组工具,它会让你在许多机器学习程序使用中很受用。当你使用scikit-learn这个工具时,你会感觉到受到了很大的帮助。(虽然这只能在你有不同的算法时起作用。)
18REP
REP是以一种和谐、可再生的方式为指挥数据移动驱动所提供的一种环境。
它有一个统一的分类器包装来提供各种各样的 *** 作,例如TMVA,Sklearn,XGBoost,uBoost等等。并且它可以在一个群体以平行的方式训练分类器。同时它也提供了一个交互式的情节。
19Python学习机器样品
用的机器学习建造的简单收集。
20Python-ELM
这是一个在Python语言下基于scikit-learn的极端学习机器的实现。
批量输入后,如何使用numpy矩阵计算的方法计算各权值梯度,提高计算速度
def backprop(self, x, y): #x为多维矩阵。每列为一个x值。 y为多维矩阵。每列为一个y值。
batch_num=xshape[1]
#print(xshape)
#print(yshape)
"""创建两个变量,用来存储所有b值和所有w值对应的梯度值。初始化为0nabla_b为一个list,形状与biases的形状完全一致。nabla_w 为一个list,形状与weights的形状完全一致。
"""
nabla_b = [npzeros(bshape) for b in selfbiases]
nabla_w = [npzeros(wshape) for w in selfweights]
# feedforward
"""activations,用来所有中间层和输出层在一次前向计算过程中的最终输出值,即a值。该值记录下来,以供后期使用BP算法求每个b和w的梯度。
"""
activation = x #x为本批多个x为列组成的矩阵。
activations = [x] # list to store all the activations, layer by layer
"""zs,用来所有中间层和输出层在一次前向计算过程中的线性输出值,即z值。该值记录下来,以供后期使用BP算法求每个b和w的梯度。
"""
zs = [] # list to store all the z vectors, layer by layer ,zs的每个元素为本batch的x对应的z为列构成的矩阵。
"""
通过一次正向计算,将中间层和输出层所有的z值和a值全部计算出来,并存储起来。供接下来求梯度使用。
"""
for b, w in zip(selfbiases, selfweights):
#print(wshape)
#print(npdot(w, activation)shape)
#print(bshape)
z = npdot(w, activation)+b #z为本batch的x对应的z为列构成的矩阵。
zsappend(z)
activation = sigmoid(z)
activationsappend(activation)
"""
以下部分是采用BP算法求解每个可训练参数的计算方法。是权重更新过程中的关键。
"""
# backward pass
# 求出输出层的delta值
delta = ((activations[-1]-y) sigmoid_prime(zs[-1]))
nabla_b[-1] = deltamean(axis=1)reshape(-1, 1)
nabla_w[-1] =npdot(delta,activations[-2]transpose())/batch_num
# Note that the variable l in the loop below is used a little
# differently to the notation in Chapter 2 of the book Here,
# l = 1 means the last layer of neurons, l = 2 is the
# second-last layer, and so on It's a renumbering of the
# scheme in the book, used here to take advantage of the fact
# that Python can use negative indices in lists
for l in range(2, selfnum_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = (npdot(selfweights[-l+1]transpose(), delta) sp)
nabla_b[-l] = deltamean(axis=1)reshape(-1, 1)
nabla_w[-l] =npdot(delta,activations[-l-1]transpose())/batch_num
return (nabla_b, nabla_w)
##梯度计算后,如何更新各权值
def update_mini_batch(self, mini_batch, eta):
"""Update the network's weights and biases by applying
gradient descent using backpropagation to a single mini batch
The ``mini_batch`` is a list of tuples ``(x, y)``, and ``eta``
is the learning rate"""
""" 初始化变量,去存储各训练参数的微分和。
"""
nabla_b = [npzeros(bshape) for b in selfbiases]
nabla_w = [npzeros(wshape) for w in selfweights]
""" 循环获取batch中的每个数据,获取各训练参数的微分,相加后获得各训练参数的微分和。
"""
x_batch=None
y_batch=None
for x, y in mini_batch:
if( x_batch is None):
x_batch=x
else:
x_batch=npappend(x_batch,x,axis=1)
if( y_batch is None):
y_batch=y
else:
y_batch=npappend(y_batch,y,axis=1)
delta_nabla_b, delta_nabla_w = selfbackprop(x_batch, y_batch)
nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]
nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]
""" 使用各训练参数的平均微分和与步长的乘积,去更新每个训练参数
"""
selfweights = [w-etanw
for w, nw in zip(selfweights, nabla_w)]
selfbiases = [b-etanb
for b, nb in zip(selfbiases, nabla_b)]
作者 | 杨照璐(微信号lwyzl0821)
编辑 | 言有三
这一次我们讲讲keras这个简单、流行的深度学习框架,一个图像分类任务从训练到测试出结果的全流程。
相关的代码、数据都在我们 Git 上,希望大家 Follow 一下这个 Git 项目,后面会持续更新不同框架下的任务。
Keras是一个非常流行、简单的深度学习框架,它的设计参考了torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU。能够在TensorFlow,CNTK或Theano之上运行。 Keras的特点是能够快速实现模型的搭建, 简单方便地让你实现从想法到实验验证的转化,这都是高效地进行科学研究的关键。
Keras的安装非常简单,但是需要先安装一个后端框架作为支撑,TensorFlow, CNTK,Theano都可以,但是官网上强烈建议使用TensorFlow作为Keras的后端进行使用。本例以TensorFlow 140 版本作为Keras的后端进行测试。
通过上面两条命令就可以完成TensorFlow和Keras的安装,此处需要注意的一点是Keras的版本和TensorFlow的版本要对应,否则会出现意外的错误。具体版本对应关系可在网上进行查询。
31 MNIST实例
MNIST手写字符分类被认为是深度学习框架里的“Hello Word!”,下面简单介绍一下MNIST数据集案例的测试。Keras的官方github的example目录下提供了几个MNIST案例的代码,下载mnist_mlppy,mnist_cnnpy文件,本地运行即可,其他文件读者也可以自行测试。
32 数据定义
前面我们介绍了MNIST数据集实例,很多读者在学习深度学习框架的时候都卡在了这一步,运行完MNIST实例之后无从下手,很大原因可能是因为不知道怎么处理自己的数据集,这一节我们通过一个简单的图像二分类案例,介绍如何实现一个自定义的数据集。
数据处理有几种方式,一种是像MNIST、CIFAR数据集,这些数据集的特点是已经为用户打包封装好了数据。用户只要load_data即可实现数据导入。其实就是事先把数据进行解析,然后保存到pkl 或者h5等文件中,然后在训练模型的时候直接导入,输入到网络中;另一种是直接从本地读取文件,解析成网络需要的格式,输入网络进行训练。但是实际情况是,为了某一个项目我们不可能总是找到相应的打包好的数据集供使用,这时候自己建立一个dataset就十分重要。
Keras提供了一个图像数据的数据增强文件,调用这个文件我们可以实现网络数据加载的功能。
此处采用keras的processing模块里的ImageDataGenerator类定义一个图像分类任务的dataset生成器:
下面简单地介绍一下上面的代码,完整代码请移步Git工程。
Keras的processing模块中提供了一个能够实时进行数据增强的图像生成类ImagGenerator,该类下面有一个函数flow_from_directory,顾名思义该函数就是从文件夹中获取图像数据。关于ImageGenerator更多的使用可以参考官方源码。数据集结构组织如下:
此处还需要注意的一点是,我们现在进行的是简单的图像分类任务训练,假如要完成语义分割,目标检测等任务,则需要自定义一个类(继承ImageDataGenerator),具体实现可以查询相关代码进行参考。
Keras网络模型搭建有两种形式,Sequential 顺序模型和使用函数式API的 Model 类模型。本教程的例子采用一个简单的三层卷积,以及两层全连接和一个分类层组成的网络模型。由于函数式API更灵活方便,因此下面采用函数式方法搭建模型,模型定义如下:
41 函数式API
即输出是12通道,卷积核大小33,步长为2,padding='same'表示边缘补零
axis表示需要归一化的坐标轴,bn_axis=3,由于采用TensorFlow作为后端,因此这句代码表示在通道数坐标轴进行归一化。
x = Flatten()(x) 表示将卷积特征图进行拉伸,以便和全连接层Dense()进行连接。
Dense()实现全连接层的功能,1200是输出维度,‘relu'表示激活函数,使用其他函数可以自行修改。
最后一层采用‘softmax’激活函数实现分类功能。
最终返回Model,包含网络的输入和输出。
42 模型编译
网络搭建完成,在网络训练前需要进行编译,包括学习方法、损失函数、评估标准等,这些参数分别可以从optimizer、loss、metric模块中导入。具体代码如下:
其中callbacks模块包含了TensorBoard, ModelCheckpoint,LearningRateScheduler等功能,分别可以用来可视化模型,设置模型检查点,以及设置学习率策略。
51 模型训练
Keras模型训练过程非常简单,只需一行代码,设置几个参数即可,具体代码如下:
首先指定数据生成器,train_generator, 前面介绍过;steps_per_epoch是每次epoch循环的次数,通过训练样本数除以batch_size得到;epochs是整个数据集重复多少次训练。
Keras是高度封装的,在模型训练过程中,看不到网络的预测结果和网络的反向传播过程,只需定义好损失函数,事实上,网络定义中的模型输出会包含网络的输入和输出。
52 训练过程可视化
keras可以采用tensorboard实现训练过程的可视化。执行完下面的命令就可以在浏览器访问>
前沿
人工智能的浪潮已经席卷全球,深度学习(Deep Learning)和人工智能(Artificial Intelligence, AI)等词汇也不断地充斥在我们身边。人工智能的发展是一个三起两落的变化,90年代期间,知识推理>神经网络>机器学习;2005年左右,机器学习>知识(语义网)>神经网络;而从2017年之后,基于深度学习的神经网络>知识(知识图谱)>机器学习。
卷积神经网络(convolutional neural network, CNN)作为深度学习中的代表,最早的灵感是来源于1961年Hubel和Wiesel两位神经生物学家,在对猫视觉皮层细胞的实验中,发现大脑可视皮层是分层的(CNN中的分层网络结构与其如出一辙)。深度学习作为机器学习(ML)的一个子领域,由于计算机能力的提高和大量数据的可用性,得到了戏剧性的复苏。但是,深度学习是否能等同或代表人工智能,这一点笔者认为有待商榷,深度学习可以认为是目前人工智能发展阶段的重要技术。由于本文主要撰写关于深度学习的入门实战,关于细节概念不做深入研究,下面笔者从实际案例,介绍深度学习处理图像的大致流程。
目录:
以手写识别数字为例,作为深度学习的入门项目,本文以Keras深度学习库为基础。其中使用的tensorflow等模块需要提前配置好,同时注意模型,保存、载入的文件路径问题。在自己的计算机上运行时,需要创建或修改。下面的流程包括:使用Keras载入MNIST数据集,构建Lenet训练网络模型,使用Keras进行模型的保存、载入,使用Keras实现对手写数字数据集的训练和预测,最后画出误差迭代图。
手写数字数据集介绍:
手写数字识别几乎是深度学习的入门数据集了。在keras中内置了MNIST数据集,其中测试集包含60000条数据,验证集包含10000条数据,为单通道的灰度,每张的像素大小为28 28一共包含10个类别,为数字0到9。
导入相关模块:
载入MNIST数据集
Keras可实现多种神经网络模型,并可以加载多种数据集来评价模型的效果,下面我们使用代码自动加载MNIST数据集。
显示MNIST训练数据集中的前面6张:
数据的预处理
首先,将数据转换为4维向量[samples][width][height][pixels],以便于后面模型的输入
为了使模型训练效果更好,通常需要对图像进行归一化处理
最后,原始MNIST数据集的数据标签是0-9,通常要将其表示成one-hot向量。如训练数据标签为1,则将其转化为向量[0,1,0,0,0,0,0,0,0,0]
模型的建立与计算
训练模型的参数设置:
本文使用Lenet网络架构,下面定义Lenet网络结构,若要更改网络结构,如用VGGNet,GoogleNet,Inception,ResNets或自己构建不同的网络结构,可以直接在这一块函数内进行修改。
再附上两个经典的模型:
VGG16:
GoogleNet:
设置优化方法,loss函数,并编译模型:
本文使用生成器以节约内存:
结果分析
作出训练阶段的损失、精确度迭代图,本文将epoch设置为10,已达到098的准确率(代码、图像如下所示)。
公众号:帕帕 科技 喵
欢迎关注与讨论~
以上就是关于回归数据集是什么意思全部的内容,包括:回归数据集是什么意思、机器学习程序、2.搭建一个神经网络模型训练MNIST手写体数字数据集中遇到的问题及解决方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)