深度学习tensorflow基础mnist

软件架构

mnist数据集的识别使用了两个非常小的网络来实现,第一个是最简单的全连接网络,第二个是卷积网络,mnist数据集是入门数据集,所以不需要进行图像增强,或者用生成器读入内存,直接使用简单的fit()命令就可以一次性训练

安装教程

  1. 使用到的主要第三方库有tensorflow1.x,基于TensorFlow的Keras,基础的库包括numpy,matplotlib
  2. 安装方式也很简答,例如:pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
  3. 注意tensorflow版本不能是2.x

使用说明

  1. 首先,我们预览数据集,运行mnistplt.py,绘制了4张训练用到的图像
  2. 训练全连接网络则运行Densemnist.py,得到权重Dense.h5,加载模型并预测运行Denseload.py
  3. 训练卷积网络则运行CNNmnist.py,得到权重CNN.h5,加载模型并预测运行CNNload.py

结果图

训练过程注释

全连接网络训练:

"""多层感知机训练"""
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import  Sequential
from keras.layers import Dense
#模拟原始灰度数据读入
img_size=28
num=10
mnist=input_data.read_data_sets("./data",one_hot=True)
X_train,y_train,X_test,y_test=mnist.train.images,mnist.train.labels,mnist.test.images,mnist.test.labels
X_train=X_train.reshape(-1,img_size,img_size)
X_test=X_test.reshape(-1,img_size,img_size)
X_train=X_train*255
X_test=X_test*255
y_train=y_train.reshape(-1,num)
y_test=y_test.reshape(-1,num)
print(X_train.shape)
print(y_train.shape)
#全连接层只能输入一维
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0],num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0],num_pixels).astype('float32')
#归一化
X_train=X_train/255
X_test=X_test/255
# one hot编码,这里编好了,省略
#y_train = np_utils.to_categorical(y_train)
#y_test = np_utils.to_categorical(y_test)
#搭建网络
def baseline():
    """
    optimizer:优化器,如Adam
    loss:计算损失,当使用categorical_crossentropy损失函数时,标签应为多类模式,例如如果你有10个类别,
    每一个样本的标签应该是一个10维的向量,该向量在对应有值的索引位置为1其余为0
    metrics: 列表,包含评估模型在训练和测试时的性能的指标
    """
    model=Sequential()
    #第一步是确定输入层的数目:在创建模型时用input_dim参数确定,例如,有784个个输入变量,就设成num_pixels。
    #全连接层用Dense类定义:第一个参数是本层神经元个数,然后是初始化方式和激活函数,初始化方法有0到0.05的连续型均匀分布(uniform
    #Keras的默认方法也是这个,也可以用高斯分布进行初始化normal,初始化实际就是该层连接上权重与偏置的初始化
    model.add(Dense(num_pixels,input_dim=num_pixels,kernel_initializer='normal',activation='relu'))
    #softmax是一种用到该层所有神经元的激活函数
    model.add(Dense(num,kernel_initializer='normal',activation='softmax'))
    #categorical_crossentropy适用于多分类问题,并使用softmax作为输出层的激活函数的情况
    model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
    return model
#训练模型
model = baseline()
"""
batch_size
整数
每次梯度更新的样本数。
未指定,默认为32
epochs
整数
训练模型迭代次数
verbose
日志展示,整数
0:为不在标准输出流输出日志信息
1:显示进度条
2:每个epoch输出一行记录
对于一个有 2000 个训练样本的数据集,将 2000 个样本分成大小为 500 的 batch,那么完成一个 epoch 需要 4 个 iteration
"""
model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=10,batch_size=200,verbose=2)
#模型概括打印
model.summary()
#model.evaluate()返回的是 损失值和你选定的指标值(例如,精度accuracy)
"""
verbose:控制日志显示的方式
verbose = 0  不在标准输出流输出日志信息
verbose = 1  输出进度条记录
"""
scores = model.evaluate(X_test,y_test,verbose=0)
print(scores)
#模型保存
model_dir="./Dense.h5"
model.save(model_dir)

CNN训练:

"""
模型构建与训练
Sequential 模型结构: 层(layers)的线性堆栈,它是一个简单的线性结构,没有多余分支,是多个网络层的堆叠
多少个滤波器就输出多少个特征图,即卷积核(滤波器)的深度
3通道RGB图片,一个滤波器有3个通道的小卷积核,但还是只算1个滤波器
"""
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
#Flatten层用来将输入“压平”,即把多维的输入一维化,
#常用在从卷积层到全连接层的过渡
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
#模拟原始灰度数据读入
img_size=28
num=10
mnist=input_data.read_data_sets("./data",one_hot=True)
X_train,y_train,X_test,y_test=mnist.train.images,mnist.train.labels,mnist.test.images,mnist.test.labels
X_train=X_train.reshape(-1,img_size,img_size)
X_test=X_test.reshape(-1,img_size,img_size)
X_train=X_train*255
X_test=X_test*255
y_train=y_train.reshape(-1,num)
y_test=y_test.reshape(-1,num)
print(X_train.shape) #(55000, 28, 28)
print(y_train.shape) #(55000, 10)
#此处卷积输入的形状要与模型中的input_shape匹配
X_train = X_train.reshape(X_train.shape[0],28,28,1).astype('float32')
X_test = X_test.reshape(X_test.shape[0],28,28,1).astype('float32')
print(X_train.shape)#(55000,28,28,1)
#归一化
X_train=X_train/255
X_test=X_test/255
# one hot编码,这里编好了,省略
#y_train = np_utils.to_categorical(y_train)
#y_test = np_utils.to_categorical(y_test)
#搭建CNN网络
def CNN():
    """
    第一层是卷积层。该层有32个feature map,作为模型的输入层,接受[pixels][width][height]大小的输入数据。feature map的大小是1*5*5,其输出接一个‘relu'激活函数
    下一层是pooling层,使用了MaxPooling,大小为2*2
    Flatten压缩一维后作为全连接层的输入层
    接下来是全连接层,有128个神经元,激活函数采用‘relu'
    最后一层是输出层,有10个神经元,每个神经元对应一个类别,输出值表示样本属于该类别的概率大小
    """
    model = Sequential()
    model.add(Conv2D(32, (5, 5), input_shape=(img_size,img_size,1), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(num, activation='softmax'))
    #编译
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model
#模型训练
model=CNN()
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=200, verbose=1)
model.summary()
scores = model.evaluate(X_test,y_test,verbose=1)
print(scores)
#模型保存
model_dir="./CNN.h5"
model.save(model_dir)

到此这篇关于mnist的文章就介绍到这了,希望可以帮到你们,更多相关深度学习内容请搜索我们以前的文章或继续浏览下面的相关文章,希望大家以后多多支持我们!

(0)

相关推荐

  • 深度学习小工程练习之tensorflow垃圾分类详解

    介绍 这是一个基于深度学习的垃圾分类小工程,用深度残差网络构建 软件架构 使用深度残差网络resnet50作为基石,在后续添加需要的层以适应不同的分类任务 模型的训练需要用生成器将数据集循环写入内存,同时图像增强以泛化模型 使用不包含网络输出部分的resnet50权重文件进行迁移学习,只训练我们在5个stage后增加的层 安装教程 需要的第三方库主要有tensorflow1.x,keras,opencv,Pillow,scikit-learn,numpy 安装方式很简单,打开terminal,例

  • 机器深度学习二分类电影的情感问题

    二分类问题可能是应用最广泛的机器学习问题.今天我们将学习根据电影评论的文字内容将其划分为正面或负面. 一.数据集来源 我们使用的是IMDB数据集,它包含来自互联网电影数据库(IMDB)的50000条严重两极分化的评论.为了避免模型过拟合只记住训练数据,我们将数据集分为用于训练的25000条评论与用于测试的25000条评论,训练集和测试集都包含50%的正面评论和50%的负面评论. 与MNIST数据集一样,IMDB数据集也内置于Keras库.它已经过预处理:评论(单词序列)已经被转换为整数序列,其中

  • 深度学习详解之初试机器学习

    机器学习可应用在各个方面,本篇将在系统性进入机器学习方向前,初步认识机器学习,利用线性回归预测波士顿房价: 原理简介 利用线性回归最简单的形式预测房价,只需要把它当做是一次线性函数y=kx+b即可.我要做的就是利用已有数据,去学习得到这条直线,有了这条直线,则对于某个特征x(比如住宅平均房间数)的任意取值,都可以找到直线上对应的房价y,也就是模型的预测值. 从上面的问题看出,这应该是一个有监督学习中的回归问题,待学习的参数为实数k和实数b(因为就只有一个特征x),从样本集合sample中取出一对

  • 吴恩达机器学习练习:神经网络(反向传播)

    1 Neural Networks 神经网络 1.1 Visualizing the data 可视化数据 这部分我们随机选取100个样本并可视化.训练集共有5000个训练样本,每个样本是20*20像素的数字的灰度图像.每个像素代表一个浮点数,表示该位置的灰度强度.20×20的像素网格被展开成一个400维的向量.在我们的数据矩阵X中,每一个样本都变成了一行,这给了我们一个5000×400矩阵X,每一行都是一个手写数字图像的训练样本. import numpy as np import matpl

  • 深度学习tensorflow基础mnist

    软件架构 mnist数据集的识别使用了两个非常小的网络来实现,第一个是最简单的全连接网络,第二个是卷积网络,mnist数据集是入门数据集,所以不需要进行图像增强,或者用生成器读入内存,直接使用简单的fit()命令就可以一次性训练 安装教程 使用到的主要第三方库有tensorflow1.x,基于TensorFlow的Keras,基础的库包括numpy,matplotlib 安装方式也很简答,例如:pip install numpy -i https://pypi.tuna.tsinghua.edu

  • python深度学习tensorflow入门基础教程示例

    目录 正文 1.编辑器 2.常量 3.变量 4.占位符 5.图(graph) 例子1:hello world 例子2:加法和乘法 例子3: 矩阵乘法 正文 TensorFlow用张量这种数据结构来表示所有的数据. 用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],可以看成是方括号嵌套的层数. 1.编辑器 编写tensorflow代码,实际上就是编写py文件,最好找一个好用的编辑器

  • Python深度学习TensorFlow神经网络基础概括

    目录 一.基础理论 1.TensorFlow 2.TensorFlow过程 1.构建图阶段 2.执行图阶段(会话) 二.TensorFlow实例(执行加法) 1.构造静态图 1-1.创建数据(张量) 1-2.创建操作(节点) 2.会话(执行) API: 普通执行 fetches(多参数执行) feed_dict(参数补充) 总代码 一.基础理论 1.TensorFlow tensor:张量(数据) flow:流动 Tensor-Flow:数据流 2.TensorFlow过程 TensorFlow

  • python深度学习tensorflow实例数据下载与读取

    目录 一.mnist数据 二.CSV数据 三.cifar10数据 一.mnist数据 深度学习的入门实例,一般就是mnist手写数字分类识别,因此我们应该先下载这个数据集. tensorflow提供一个input_data.py文件,专门用于下载mnist数据,我们直接调用就可以了,代码如下: import tensorflow.examples.tutorials.mnist.input_data mnist = input_data.read_data_sets("MNIST_data/&q

  • 深度学习Tensorflow 2.4 完成迁移学习和模型微调

    目录 前言 实现过程 1. 获取数据 2. 数据扩充与数据缩放 3. 迁移学习 4. 微调 5. 预测 前言 本文使用 cpu 的 tensorflow 2.4 完成迁移学习和模型微调,并使用训练好的模型完成猫狗图片分类任务. 预训练模型在 NLP 中最常见的可能就是 BERT 了,在 CV 中我们此次用到了 MobileNetV2 ,它也是一个轻量化预训练模型,它已经经过大量的图片分类任务的训练,里面保存了一个可以通用的去捕获图片特征的模型网络结构,其可以通用地提取出图片的有意义特征.这些特征

  • python深度学习TensorFlow神经网络模型的保存和读取

    目录 之前的笔记里实现了softmax回归分类.简单的含有一个隐层的神经网络.卷积神经网络等等,但是这些代码在训练完成之后就直接退出了,并没有将训练得到的模型保存下来方便下次直接使用.为了让训练结果可以复用,需要将训练好的神经网络模型持久化,这就是这篇笔记里要写的东西. TensorFlow提供了一个非常简单的API,即tf.train.Saver类来保存和还原一个神经网络模型. 下面代码给出了保存TensorFlow模型的方法: import tensorflow as tf # 声明两个变量

  • python深度学习tensorflow安装调试教程

    目录 正文 一.安装anaconda 二.安装tensorflow 三.调试 正文 用过一段时间的caffe后,对caffe有两点感受:1.速度确实快; 2. 太不灵活了. 深度学习技术一直在发展,但是caffe的更新跟不上进度,也许是维护团队的关系:CAFFE团队成员都是业余时间在维护和更新.导致的结果就是很多新的技术在caffe里用不了,比如RNN, LSTM,batch-norm等.当然这些现在也算是旧的东西了,也许caffe已经有了,我已经很久没有关注caffe的新版本了.它的不灵活之处

  • python深度学习tensorflow卷积层示例教程

    目录 一.旧版本(1.0以下)的卷积函数:tf.nn.conv2d 二.1.0版本中的卷积函数:tf.layers.conv2d 一.旧版本(1.0以下)的卷积函数:tf.nn.conv2d 在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化. conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None ) 该函数定义在tensorflow/pytho

  • python深度学习tensorflow训练好的模型进行图像分类

    目录 正文 随机找一张图片 读取图片进行分类识别 最后输出 正文 谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类. 下载链接: https://pan.baidu.com/s/1XGfwYer5pIEDkpM3nM6o2A 提取码: hu66 下载完解压后,得到几个文件: 其中 classify_image_graph_def.pb 文件就是训练好的Inception-v3模型. imagenet_synset_to_huma

  • TensorFlow深度学习之卷积神经网络CNN

    一.卷积神经网络的概述 卷积神经网络(ConvolutionalNeural Network,CNN)最初是为解决图像识别等问题设计的,CNN现在的应用已经不限于图像和视频,也可用于时间序列信号,比如音频信号和文本数据等.CNN作为一个深度学习架构被提出的最初诉求是降低对图像数据预处理的要求,避免复杂的特征工程.在卷积神经网络中,第一个卷积层会直接接受图像像素级的输入,每一层卷积(滤波器)都会提取数据中最有效的特征,这种方法可以提取到图像中最基础的特征,而后再进行组合和抽象形成更高阶的特征,因此

随机推荐