2021年人工神经网络第四次作业-第四题:旋转的数字

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年人工神经网络第四次作业-第四题:旋转的数字相关的知识,希望对你有一定的参考价值。

简 介: 本文对于作业中给定的机械数字字符识别问题进行了实验研究。通过对于采样1000样本的数据集合进行训练,经过增加DropOut的可以增加网络的泛化性能。对于网络规模的增加对训练精度没有明显的改进。由于数据集合比较小,因此作业中的一些结论并不具有代表特性。

关键词 旋转数字DropoutLeNet

作业准备
文章目录
作业要求
数据准备
构建网络
构建加载函数
构建LeNet网络
构建训练过程
训练网络
基本训练
利用模型去识
别红色字符
使用1000个灰度
图片训练模型
作业总结

 

§01 业准备


1.1 作业要求

根据 2021年人工神经网络第四次作业要求 对于第四次作业的要求,将作业条件整理如下:

1.1.1 数据库

  ROTATEDIGIT数据集合是采集到机械电能表显示的数字。这类数字中包含有数字滚轮在不同角度下数字的图片。这些数字不同角度除了对应了数字本身,还代表了整数之间的小数分量。

▲ 图1.1.1 机械电能表上的旋转数字

  在ROTATEDIGIT目录下包括有如下六个数据文件:

▲ 图1.1.2 六个数据文件

  将数据库使用MATLAB命令LOAD调入之后,会产生以下数据变量:

  1. digitsize: 表示数字图像的尺寸

  2. digit:1000×2128×3,数字图片。前面是数字图片的个数,中间是宽×高,后面是RGB三维。

  3. labels:数字标签:0~9

  4. fraction:表示数字整数之后的小数。即反映了数字旋转的程度。fraction部分,有的数据集合存在,有的不存在。

1.1.2 实验要求

  ① 选择合适的神经网络,完成对数据集合的字符识别。

  ② 讨论使用某一类数字集合训练之后的网络,在另外数字集合上的泛化性能。

  ③ 讨论网络正则化的方法对于网络泛化能力的影响:
  1. 对于网络权系数范数约束;
  2. 对输入样本增加噪声;
  3. 对输入样板进行变形增强;
  4. 使用Drop-out技术训练网络

  ④ 对于有Fraction标签的数据集合,构造一个具有输出带有小数点数字输出的回归网络。并讨论它与前面分类网络在网络结构,训练方法等方面的特点。

1.2 数据准备

1.2.1 下载并解压缩数据文件

  从网络学堂下载第四次作业数据文件,ANN-DATA.ZIP,经过解压缩之后,可以获得如下子目录。

├─CIFAR-10
├─FORBIDDEN
├─FruitAnimal
│  ├─动物
│  │  └─动物
│  └─水果
│      └─水果
├─MNIST
└─ROTATEDIGIT

  在ROTATEDEGIT目录中,具有如下六个MATLAB 的.MAT文件。

    black_10.mat
    black_11.mat
    black_1_1.mat
    red_10.mat
    red_20.mat
    red_21.mat

1.2.2 Studio环境

  将上述数据文件上载到AI Studio的的work目录中。

  • 注意: 不要在data目录中存储数据文件。这个目录只是用于存储临时生成的数据文件。在下次启动的时候,该目录中除了项目一开始添加的数据文件之外,其它的数据和子目录将会被清除。

  上载到AI Studio work 子目录 rotatedigit子目录中的数据文件:

▲ 图1.2.1 上载到AI Studio work 子目录 rotatedigit子目录中的数据文件:

1.2.3 读取和分析数据

(1)安装mat4py

  根据 在Python读取MATLAB数据文件 介绍,利用mat4py读取MATLAB的数据文件的方法,所以需要在notebook环境下安装mat4py软件包。

! pip install mat4py
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting mat4py
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e8/56/41b3ffd7b5f3eb3056979e0dc37de184c6e5dacd1a353e5de42323e7d138/mat4py-0.5.0-py2.py3-none-any.whl
Installing collected packages: mat4py
Successfully installed mat4py-0.5.0

(2)读取分析数据文件

  读取 black_10.mat 数据文件并显示其中的内容。

  由于在原来的数据存在彩色数字图片数据,这是三维的数据。

  MATLAB的数据文件中存在三维度的数组,在使用 mat4py 的 loadmat 函数读取该文件的时候,会出现错误。

▲ 图1.2.2 MATLAB的数据文件中存在三维度的数组

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import mat4py

datafile = '/home/aistudio/work/rotatedigit/black_10.mat'

data = mat4py.loadmat(datafile)

print(data.keys())
---------------------------------------------------------------------------
ParseError                                Traceback (most recent call last)
/tmp/ipykernel_250/1524074423.py in <module>
      6 datafile = '/home/aistudio/work/rotatedigit/black_10.mat'
      7 
----> 8 data = mat4py.loadmat(datafile)
      9 
     10 print(data.keys())

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/mat4py/loadmat.py in loadmat(filename, meta)
    458     # read data elements
    459     while not eof(fd):
--> 460         hdr, next_position, fd_var = read_var_header(fd, endian)
    461         name = hdr['name']
    462         if name in mdict:

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/mat4py/loadmat.py in read_var_header(fd, endian)
    254                          'got '.format(etypes['miMATRIX']['n'], mtpn))
    255     # read the header
--> 256     header = read_header(fd, endian)
    257     return header, next_pos, fd
    258 

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/mat4py/loadmat.py in read_header(fd, endian)
    222     header['n_dims'] = len(header['dims'])
    223     if header['n_dims'] != 2:
--> 224         raise ParseError('Only matrices with dimension 2 are supported.')
    225     header['name'] = read_elements(fd, endian, ['miINT8'], is_name=True)
    226     return header

ParseError: Only matrices with dimension 2 are supported.

(3)解决方法

  在MATLAB中将原来存储数字的图片矩阵修改成二维的数组,将原有的存储数字图片数组尺寸:(120×1776×3)修改成(120×5328)。然后重新存储这些数据文件,再上载AI Studio环境进行读取。

 Ⅰ.在MATLAB修改数组并存储
>>> digit2 = reshape(digit, 120, 5328)
>>> save('d:\\temp\\black_10_mod', 'digit2', 'labels')
 Ⅱ.上载读取测试
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import mat4py

datafile = '/home/aistudio/work/rotatedigit/black_10_mod.mat'

data = mat4py.loadmat(datafile)

print(data.keys())

dict_keys(['digit2', 'labels'])

  可以看到在将原有的MATLAB数据文件中的三维数组修改成二维之后,便可以使用mat4py的loadmat函数正常读取了。

labels = data['labels']
images = data['digit2']

print(type(labels), "\\n",  shape(labels))
print(type(images), "\\n",  shape(images))

<class 'list'>
(120,)
<class 'list'>
(120, 5328)

print(labels)

['4', '4', '4', '4', '4', '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '6', '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', '7', '8', '8', '8', '8', '8', '8', '8', '8', '8', '8', '8', '8', '9', '9', '9', '9', '9', '9', '9', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '9', '9', '9', '9', '9', '1', '1', '1', '1', '1', '0', '2', '2', '2', '2', '2', '2', '2', '0', '0', '0', '0', '0', '0', '2', '2', '2', '2', '2', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '3', '4', '4', '4', '4', '4', '4', '4']

1.2.4 显示图片

(1)显示单张图片

imagewidth = 37
imageheight = 48

imgdata = array(images[10]).reshape(3, imageheight, imagewidth).swapaxes(1,2).T
print(shape(imgdata))

plt.figure(figsize=(5, 7))
plt.imshow(imgdata)

(48, 37, 3)
<matplotlib.image.AxesImage at 0x7f769d4ce350>
第10张图片对应的数字图片:

▲ 图1.2.3 第10张图片对应的数字图片:

(2)顺序显示所有图片

  顺序显示所有的图片,这是所有采集到的旋转移动的数字图片。

▲ 图1.2.4 顺序显示所有的图片

gifpath = '/home/aistudio/GIF'

filedim = os.listdir(gifpath)
for f in filedim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

for i in range(len(labels)):
    imgdata = array(images[i]).reshape(3,imageheight, imagewidth).swapaxes(1,2).T
    plt.figure(figsize=(5,7))
    plt.imshow(imgdata)
    savefile = os.path.join(gifpath, '%03d.jpg'%i)
    plt.savefig(savefile)

    print('Save figure:%d'%i)

1.2.5 数据全部处理

以上是关于2021年人工神经网络第四次作业-第四题:旋转的数字的主要内容,如果未能解决你的问题,请参考以下文章

2021年人工神经网络第四次作业要求

2021年人工神经网络第四次作业要求:第七题

2021年人工神经网络第四次作业 - 第三题Cifar10

2021年人工神经网络第四次作业-第五题:危险品识别

2021年人工神经网络第四次作业 - 第二题MNIST手写体识别

2021年人工神经网络第四次作业-第一题:LeNet对于水果与动物进行分类