- 深度学习框架发展历史
- TensorFlow框架发展历程
- 神经网络主流API
- 手写数字问题初步
- 引言
- MNIST数据集介绍
- 数据集读取
- 数据可视化
- 矩阵表示图片就是研究矩阵里放哪些值
- Computation Graph、one-hot独热编码初步
- relu函数初步、欧式距离
- 总结
- 小练习
loss 可称为目标函数、损失函数
TensorFlow三大核心: tensorflow.layers(层)、tensorflow.metrics(矩阵)、tensorflow.losses(目标函数)
由tfcontrib引出复习梯度下降
TensorFlow框架发展历程2015年的TensorFlow 1.0版本很明显不如PyTorch简便
神经网络主流API 手写数字问题初步Google收购TensorFlow后,合并TF+Keras,推出TensorFlow 2.0,使得TensorFlow变得更简便
引言思考: 这是个什么问题;通过什么技术(方式)来解决这个问题;怎么实现这个技术;神经网络在计算机的思维里是怎么建立的;为什么要用这样的神经网络来模拟人的思维?
简单线性模型: y=w*x+b,之前x到y都是单个数字与单个数字之间映射,意思是如: y=2x+3,x=1时,映射到y=5,都只涉及到一个数字。
而当输入输出变得多变以后,可以变成矩阵到矩阵的映射,如[0 1 1 2]映射到[3 5 5 7];在其它模型中,也可以矩阵映射到单一数字。
映射就是工序,这个要牢记
也可以采取某种映射模型,如 将[up, left, down, right] 映射到 [dog, cat, whale, bird]。并不是只能数字映射到数字,也可以数字映射到文字,文字映射到数字。只要找到适当的映射,任何万物都可以相连起来。
基于上述这句话的思维,在图像分类时,输入是图片,输出是英文单词,我们需要找到表达出图片的方式。下面是MNIST数据集引入:
minist数据集引入用于NLPCV基础文章5
MNIST数据集介绍Size: 28×28 灰度手写数字图像
Num: 训练集 60000 和 测试集 10000,一共70000张图片
Classes: 0,1,2,3,4,5,6,7,8,9
官方下载链接: MNIST
使用jupyter lab测试。路径看自己电脑作修改。无法读取文件,则修改参数:download=True。
- MNIST数据集文件
- train-images-idx3-ubyte.gz:训练集图像(9912422 字节)55000张训练集 + 5000张验证集;
- train-labels-idx1-ubyte.gz:训练集标签(28881 字节)训练集对应的标签;
- t10k-images-idx3-ubyte.gz:测试集图像(1648877 字节)10000张测试集;
- t10k-labels-idx1-ubyte.gz:测试集标签(4542 字节)测试集对应的标签;
- 读取MNIST数据集
如果数据集没有下载,修改参数:download=True
from torchvision import datasets, transforms
train_data = datasets.MNIST(root="./MNIST",
train=True,
transform=transforms.ToTensor(),
download=False)
test_data = datasets.MNIST(root="./MNIST",
train=False,
transform=transforms.ToTensor(),
download=False)
print(train_data)
print(test_data)
输出结果:
Dataset MNIST
Number of datapoints: 60000
Root location: ./MNIST
Split: Train
StandardTransform
Transform: ToTensor()
Dataset MNIST
Number of datapoints: 10000
Root location: ./MNIST
Split: Test
StandardTransform
Transform: ToTensor()
完整的数据集读取代码:
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
train_data = datasets.MNIST(root="./MNIST",
train=True,
transform=transforms.ToTensor(),
download=False)
test_data = datasets.MNIST(root="./MNIST",
train=False,
transform=transforms.ToTensor(),
download=False)
train_loader = DataLoader(dataset=train_data,
batch_size=64,
shuffle=True)
test_loader = DataLoader(dataset=test_data,
batch_size=64,
shuffle=True)
数据可视化
以数据集为例:
import torchvision
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
import numpy as np
import matplotlib.pyplot as plt
train_data = datasets.MNIST(root="./MNIST",
train=True,
transform=transforms.ToTensor(),
download=False)
train_loader = DataLoader(dataset=train_data,
batch_size=64,
shuffle=True)
for num, (image, label) in enumerate(train_loader):
image_batch = torchvision.utils.make_grid(image, padding=2)
plt.imshow(np.transpose(image_batch.numpy(), (1, 2, 0)), vmin=0, vmax=255)
plt.show()
print(label)
输出:
人工智能有个方向叫表示学习,研究如何将自然界的东西表示成计算机能够接受的形式
对于一张图片是png、jpg等格式,计算机是不理解这种格式的,常见的图片表示有: RGB(三元组)、灰度值(四元组)。
对于下面这张“8”图片,我们用28*28*1大小的像素点,这些像素点组成多维矩阵来表示这张图片,今后重点研究的就是这个矩阵里面放哪些值:
矩阵表示图片就是研究矩阵里放哪些值
假如现有通用形式的输入x: [b, 784]。“b”表示“batch”,代表一组数据,b的值就是有几张图片。这里每张图片用“784”个值来表示。甚至这个输入x也可写作[b, 28, 28]、[b, 28, 28, 1],其中输入[b, 28, 28]表示,每个图片用28*28的矩阵来表示,矩阵中有784个元素。
假设dog用0表示,cat用1表示,fish用2表示;
将[b, 28, 28]输入,经过多道工序(映射)后,得到0或1或2,将高维矩阵映射到单个数字,需要复杂的多道工序(映射):
下面视频清晰版: 链接: https://pan.baidu.com/s/1xwzPn_e_Rcy-e7CMADMwkw?pwd=derx 提取码: derx
CVNLP基础文章5Computation Graph
relu函数初步、欧式距离
那么,怎么跟之前的神经网络联系起来呢?如果直接用[b, 784] * [784, 10] = [b, 10],这个仅用一步得到了输出,太过简单暴力,无法应对复杂的问题。要根据问题的复杂程度,选择合适的模型。可以分成多个步骤得到[b ,10],并且用relu函数处理每轮的输入更好,详情见图片下面视频:
下面视频清晰版: 链接: https://pan.baidu.com/s/1ZMDVBjDBBotBhUer3oenUg?pwd=6a8t 提取码: 6a8t
CVNLP基础文章5relu函数初步欧式距离
总结均方差MSE: mean square error。多维时,可以采用“欧式距离”,计算“输出out”和“label y”之间的loss值
下面视频清晰版: 链接: https://pan.baidu.com/s/17pdfOT03NVhsiBmuDwVQNQ?pwd=f956 提取码: f956
CVNLP基础文章5分类过程
小练习现有100张图片,输入x为[100, 784],输出label y为20分类。写出三层工序的过程,并写出每个w、b的维度,以及每一层输出的维度。



