栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

CV&NLP基础5之tensorflow初见

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CV&NLP基础5之tensorflow初见

文章目录
  • 深度学习框架发展历史
  • TensorFlow框架发展历程
  • 神经网络主流API
  • 手写数字问题初步
    • 引言
    • MNIST数据集介绍
    • 数据集读取
    • 数据可视化
  • 矩阵表示图片就是研究矩阵里放哪些值
  • Computation Graph、one-hot独热编码初步
  • relu函数初步、欧式距离
  • 总结
  • 小练习

深度学习框架发展历史


loss 可称为目标函数、损失函数
TensorFlow三大核心: tensorflow.layers(层)、tensorflow.metrics(矩阵)、tensorflow.losses(目标函数)

由tfcontrib引出复习梯度下降

TensorFlow框架发展历程

2015年的TensorFlow 1.0版本很明显不如PyTorch简便


Google收购TensorFlow后,合并TF+Keras,推出TensorFlow 2.0,使得TensorFlow变得更简便

神经网络主流API

手写数字问题初步

思考: 这是个什么问题;通过什么技术(方式)来解决这个问题;怎么实现这个技术;神经网络在计算机的思维里是怎么建立的;为什么要用这样的神经网络来模拟人的思维?

引言

简单线性模型: 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。

  1. 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 字节)测试集对应的标签;
  1. 读取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,将高维矩阵映射到单个数字,需要复杂的多道工序(映射):

Computation Graph、one-hot独热编码初步

下面视频清晰版: 链接: 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的维度,以及每一层输出的维度。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034680.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号