第3章 神经网络的TensorFlow实现(一)

学习目标:实现自己的第一个深度学习模型

1 神经网络的数据结构

张量 tensor 可以理解为n维数组或矩阵。根据维数的不同,张量又可以分为标量、向量、矩阵、3D张量及更高维张量。

1.标量

仅包含一个数字的张量,又称零维张量(0D张量)。在numpy数组中,一个float32 或 float64的数字就是一个标量,可以用ndim查看张量的维度。
下面是一个标量示例:

import numpy as np
x = np.array(888)
print(x)
print(x.ndim)

运行结果

2.向量

指由数字组成的数组,也称为一维张量(1D张量)。示例:
向量示例

3. 矩阵

指由向量组成的数组,也称为二维张量(2D张量),有两个维度,一个是行,一个是列。示例:
二维张量
实例:
(1)学生成绩数据。其中包括每个学生数学、语文、英语3门课的分数,每个人可以表示为包含3个值的向量,假设有100个学生,那么这将存储在形状为(100,3)的2D张量中。
(2)家庭收入数据

4. 3D张量与更高维张量

指由多个矩阵组成的数组,可以理解为关于数字的三维立体矩阵。示例:
三维张量
实例:时间序列数据
(samples,timesspans, features),第一个参数代表样本数,第二个参数代表时间步长,第三个参数代表特征数。例子:
(1)各省份宏观经济数据。记录1978-2018年全国34个省份每年的宏观经济数据,包括GDP, CPI和FDI。那么每个省份的数据都被编码为 (40,3)的2D张量,而全国34个省份的数据就可以保存在一个形状为(34,40,3)的3D张量中。
(2)股票价格数据

将多个3D张量组合成一个数组,就可以创建4D张量。以此类推,可以创建更高维的张量。
4D张量数据示例:图像数据
图像数据是个4D张量,存储形状为(samples,height,width,channels)
如果不关注第一个参数样本数,则一张图像数据就是一个三维立体矩阵。
(1)对于灰度图像,只有一个颜色通道,假设图像像素矩阵大小是128像素*128像素,那么100张灰度图像可以保存在一个形状为 (100,128,128,1)的张量中。
(2)对于彩色图像,有3个颜色通道(RGB),(100,128,128,3)

2 图像数据的运算

1. 读入图像

#载入image包
from PIL import Image
photo = Image.open('./photos/xiongda.jpg') #.open函数用于打开图像数据
photo

熊大

2.改变大小

#通过.size函数查看原始图像的大小,并通过resize函数改变图像的大小。
在实际数据分析中,不同图像的大小规格会不一样,为了后续图像处理方便,通常将其统一规格。示例:

print(photo.size)
photo = photo.resize([128,128])
print(photo.size)
photo

改变图像大小

3.矩阵转换

将图像通过 .array函数转换为矩阵形式。通过array函数,把图像数据转换为一个1281283的张量。

import numpy as np
Im = np.array(photo)
print(Im.shape)
Im[:,:,0]
#将第0个通道的矩阵元素展示出来

矩阵转换
至此,就将一张图像转换为了一个三维立体矩阵,方便后续进行各种代数运算。

4.尺度变化

以上实例中,每个元素的取值大小为0~255. 在实际的模型训练中,常常需要变换原始像素矩阵的尺度,将每个元素的取值除以255,将其变为0~ 1的数。

Im = Im/255
print(Im[:,:,0])

图像归一化

5.图像展示

经过前面几个步骤处理,最开始的图像现在变成了一个三维立体矩阵,用Im表示。接下来需要通过 .imshow 函数将三维立体矩阵展示成图像形式。

from matplotlib import pyplot as plt
plt.imshow(Im)  #通过.imshow 函数将三维立体矩阵展示成图像形式

图像展示

2.2 图像数据的代数运算

图像转换为三维立体矩阵后,就可以对其进行基本的代数运算了。
下面通过例子对图像数据进行加法、减法、乘法和除法运算。

Im1 = Im + 0.5
Im2 = 1-Im
Im3 = 0.5*Im
Im4 = Im/0.5
plt.figure() # .figure函数用于初始化画板
fig,ax = plt.subplots(1,4)  # .subplots函数用于切分画板,这里切分成了1行4列
fig.set_figwidth(15)  # 设置画板的宽度为15个单位
ax[0].imshow(Im1)  #ax可以控制图像的位置,索引从0开始
ax[1].imshow(Im2)
ax[2].imshow(Im3)
ax[3].imshow(Im4)

图像数据的代数运算

参考学习资料:

《深度学习 从入门到精通》 微课版 人民邮电出版社,王汉生、周静编著。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值