深度学习(一)

深度学习(一)

一、实验目的

掌握前馈全连接神经网络,具体包括:

(1) 前馈全连接神经网络的网络结构

(2) 前馈神全连接经网络的工作原理

(3) 前馈全连接神经网络的代码实现

二、实验内容

1. 导入常用工具包

2. 数据导入与数据观察

3. 数据预处理

4. 前馈全连接神经网络(Sequential模型)

5. 课堂练习:尝试用之前介绍的Sequential()方法,构建前馈全连接神经网络对鸢尾花数据集进行分类

三、实验步骤及结果

1. 导入常用工具包

NumPy: 这是一个强大的数学库,用于进行数值计算。它提供了多维数组对象和一系列数学函数,可以用来处理线性代数、傅里叶变换、随机数等。

Pandas: 这是一个数据分析和操作的库,提供了DataFrame对象,可以用来处理结构化数据(类似于Excel表格)。它支持数据的导入导出、索引、数据清洗、数据可视化等功能。

Matplotlib: 这是一个绘图库,用于创建静态、交互式和动画可视化。它提供了丰富的函数来生成条形图、散点图、线图、饼图等不同类型的图表。

sklearn.datasets: 这是Scikit-learn库的一部分,专门用于加载流行的数据集,如Iris、digits、wine等,用于机器学习实验。

sklearn.model_selection: 同样是Scikit-learn库的一部分,提供了数据集划分、交叉验证、学习曲线等模型选择和评估的功能。

tensorflow.keras.layers: TensorFlow是一个开源的机器学习库,其keras接口提供了一种更简洁、更模块化的方式来构建和训练神经网络。layers模块包含构建神经网络所需的各种层,如Input、Dense(全连接层)、concatenate(拼接层)等。

tensorflow.keras.models: 这是TensorFlow Keras接口的一部分,用于构建和训练模型。Model类是主要的构造块,用于创建神经网络模型。

tensorflow.keras.backend: 这是TensorFlow Keras的底层接口,提供了许多在构建和训练模型时可能需要的底层函数和常量。它允许用户直接与TensorFlow的后端进行交互,进行高级操作。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from tensorflow.keras.layers import Input, Dense, concatenate

from tensorflow.keras.models import Model

from tensorflow.keras import backend as K

2.数据导入与观察数据

path = "C:/Users/14919/OneDrive/Desktop/工坊/深度学习-工坊/MNIST/"

train_Data = pd.read_csv(path+'mnist_train.csv',header = None) # 训练数据

test_Data= pd.read_csv(path+'mnist_test.csv',header = None) # 测试数据



# 观察数据

print('Train data')

train_Data.info()

print('nTest data')

test_Data.info()

使用Python的pandas库来读取MNIST数据集的训练集和测试集。MNIST数据集是一个手写数字的数据集,包含了0到9的手写数字的图片。

定义=一个路径path,这个路径是指向MNIST数据集所在的文件夹。然后使用pandas的read_csv函数读取训练集和测试集的数据,并将数据的表头设置为None,这意味着数据文件中没有表头。

使用info()函数来观察数据的信息。这个函数会输出数据的基本信息,包括数据的行数、列数、每列的数据类型、非空值的数量等。

x = train_Data.iloc[0] # 取第一行数据

y = x[0] # 标签信息

img = x[1:].values.reshape(28,28) # 将1*784行转化成28*28

plt.imshow(img) # 画图

plt.title('label = '+ str(y))

plt.show()

从MNIST数据集中提取第一行数据,将其解析为图像和对应的标签,并使用matplotlib库来显示这个图像。

x = train_Data.iloc[0]:使用pandas的`iloc`方法来提取训练数据集的第一行。在MNIST数据集中,每一行代表一个手写数字的图像,第一列是标签(即这个图像代表的数字),其余列是图像的像素值。

y = x[0]:从第一行数据中提取第一个元素,即图像的标签。这个标签是一个整数,表示图像中的手写数字。

img = x[1:].values.reshape(28,28):从第一行数据中提取从第二个元素开始的所有元素,即图像的像素值。.values将pandas的Series对象转换为NumPy数组,然后使用reshape方法将这个一维数组转换为一个28x28的二维数组。这是因为MNIST图像的原始大小是28x28像素。

plt.imshow(img):使用matplotlib的imshow函数来显示图像。这个函数可以显示二维数组作为图像。

plt.title('label = '+ str(y)):设置图像的标题,显示图像的标签。

plt.show():调用`show`函数来显示图像。这会在一个新的窗口中显示图像,标题为图像的标签。

3.数据预处理

X = train_Data.iloc[:,1:].values

y = train_Data.iloc[:,0].values

print("数据X中的最大值:",X.max())

print("数据X中的最小值:",X.min())

X = train_Data.iloc[:,1:].values:使用pandas的iloc方法来提取训练数据集中所有行的第2列到最后一列的数据,即所有图像的像素值。.values将提取的数据转换为NumPy数组。这样,X就变成了一个二维数组,其中每个元素都是一个图像的所有像素值,且每个图像展平为一个长度为784(28x28)的一维数组。

y = train_Data.iloc[:,0].values:使用iloc方法提取训练数据集中所有行的第1列数据,即所有图像的标签。这样,y就变成了一个一维数组,其中每个元素都是一个图像对应的数字标签。

print("数据X中的最大值:",X.max()):使用NumPy的max函数来找出X中的最大值,并打印出来。这个最大值代表了图像中像素的最大亮度值,对于MNIST数据集,由于像素值是灰度值,最大值为255,代表白色。

print("数据X中的最小值:",X.min()):使用NumPy的min函数来找出X中的最小值,并打印出来。这个最小值代表了图像中像素的最小亮度值,对于MNIST数据集,最小值为0,代表黑色。

# 归一化

X = X/255

# 此时将数值大小缩小在[0,1]范围内,重新观察数据中的最大、小值

print("数据X中的最大值:",X.max())

print("数据X的最小值:",X.min())

对特征数据X进行了归一化处理。归一化是一种常用的数据预处理技术,它将数据缩放到一个特定的范围,通常是[0, 1]或[-1, 1]。在这个例子中,数据被缩放到了[0, 1]的范围内。

X_valid, X_train = X[:5000],X[5000:]

y_valid, y_train = y[:5000],y[5000:]

X_test,y_test = test_Data.iloc[:,1:].values/255, test_Data.iloc[:,0].values

从原始的MNIST训练数据集中分割出一个验证集和一个新的训练集,并对测试集进行归一化处理。

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值