深度学习TF—1.TensorFlow2基本操作
文章目录
- 一、Tensorflow的数据类型
- 1.简单创建Tensor
- 2.Tensor的属性
- 3.检查数据类型
- 4.类型的转换
- 5.tf.Variable
- 二、创建Tensor及应用场景
- 1.创建Tensor
- 2.Tensor的应用场景
- 三、索引与切片
- 1.Basic indexing
- 2.Numpy-style indexing
- 3. start:end-单冒号
- 4.省略号…代替多个冒号
- 5.Selective Indexing
- 四、维度变换
- 1.tf.reshape
- 2.tf.transpose转置
- 3.tf.expend_dims增加维度
- 4.tf.squeeze减小维度
- 五、broadcasting
- 六、数学运算
- 1.元素
- 2.矩阵
- 3.liner layer
- 七、前向传播实战
一、Tensorflow的数据类型
在深度学习之前,list类型、ndarray类型就已经存在,但是不支持GPU和求导操作,因此,出现了一种新的数据类型—tf.Tensor(维度大于2),tf.Variable(数据求导时用到)
tensor(张量)共有以下数据格式:
int(整型)、float(单精度浮点型)、double(双精度浮点型)
bool(布尔型)
string(字符型)
1.简单创建Tensor
2.Tensor的属性
3.检查数据类型
4.类型的转换
5.tf.Variable
该数据类型使其具有可求导的特性。将tf.Tensor->tf.Variable后,会使其自动记录梯度的相关信息。
二、创建Tensor及应用场景
1.创建Tensor
将list、ndarray转换成Tensor
tf.zeros()、tf.ones()—传入的是shape
tf.fill()—填充
参数分别是shape与value
tf.random.normal()—随机初始化
参数分别为shape、mean与std
tf.random.uniform()—均匀分布
参数分别为shape、下界与上界
tf.random.shuffle()—随机打散
tf.constant()
2.Tensor的应用场景
scalar-标量
Vector-向量
Matrix-矩阵
Dim=3 Tensor
Dim=4 Tensor
Dim=5 Tensor
三、索引与切片
1.Basic indexing
a[idx][idx][idx]...
2.Numpy-style indexing
3. start:end-单冒号
Indexing by:表示将某一个维度都选取
Indexing by ::加一个步长
4.省略号…代替多个冒号
5.Selective Indexing
tf.gather根据所给索引进行收集
tf.gather_nd将最内层的括号当成联合索引的坐标
tf.boolean_mask—bool类型
四、维度变换
1.tf.reshape
2.tf.transpose转置
3.tf.expend_dims增加维度
4.tf.squeeze减小维度
五、broadcasting
张量维度的扩张手段,指对某一维度重复n次,但没有在数据上显示出来
小维度先右对齐,如果两个不相等,表明不能broadcast
有助于节省内存空间
六、数学运算
1.元素
2.矩阵
3.liner layer
七、前向传播实战
# 将无关信息屏蔽掉
import os
# 取值有四个:0,1,2,3,分别对应INFO,WARNING,ERROR,FATAL
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets# 加载数据集 x:[60k,28,28] y:[60k]
(x, y), _ = datasets.mnist.load_data()
# x: [0~255] => [0~1.]
x = tf.convert_to_tensor(x, dtype=tf.float32) / 255
y = tf.convert_to_tensor(y, dtype=tf.int32)print(x.shape, y.shape, x.dtype, y.dtype)
# 查看数据范围
print(tf.reduce_min(x), tf.reduce_max(x))
print(tf.reduce_min(y), tf.reduce_max(y))# from_tensor_slices表示切分传入Tensor的第一个维度,生成相应的dataset
train_db = tf.data.Dataset.from_tensor_slices((x,y)).batch(128)
train_iter = iter(train_db)
sample = next(train_iter)
print('batch:', sample[0].shape, sample[1].shape) # batch: (128, 28, 28) (128,)# 构建权值
# X: [b,784] => [b,256] => [b,128] => [b,10]
# W: [dim_in,dim_out] b: [dim_out]
# truncated_normal表示正态分布,设置为均值为0,方差为0.1的范围,可解决梯度爆炸与梯度离散的情况
w1 = tf.Variable(tf.random.truncated_normal([784, 256], stddev=0.1))
b1 = tf.Variable(tf.zeros([256]))
w2 = tf.Variable(tf.random.truncated_normal([256, 128], stddev=0.1))
b2 = tf.Variable(tf.zeros([128]))
w3 = tf.Variable(tf.random.truncated_normal([128, 10], stddev=0.1))
b3 = tf.Variable(tf.zeros([10]))lr = 1e-3
for epoch in range(10): # 迭代整个数据集for step, (x, y) in enumerate(train_db): # for every batch# x:[128,28,28] y:[128]# [b,28,28] => [b,28*28]x = tf.reshape(x, [-1, 28*28])# 求梯度# GradientTape默认只会跟踪类型为tf.Variablewith tf.GradientTape() as tape:# x: [b, 28*28]# h1 = x@w1 + b1# [b, 784]@[784, 256] + [256] => [b, 256] + [256] => [b, 256] + [b, 256]h1 = x @ w1 + tf.broadcast_to(b1, [x.shape[0], 256])h1 = tf.nn.relu(h1)# [b, 256] => [b, 128]h2 = h1 @ w2 + b2h2 = tf.nn.relu(h2)# [b, 128] => [b, 10]out = h2 @ w3 + b3# compute loss# out: [b, 10]# y: [b] => [b, 10]y_onehot = tf.one_hot(y, depth=10)# mse = mean(sum(y-out)^2)# [b, 10]loss = tf.square(y_onehot - out)# mean: scalarloss = tf.reduce_mean(loss)# 计算梯度,返回对应的梯度列表grads = tape.gradient(loss, [w1, b1, w2, b2, w3, b3])# print(grads)# 更新可训练参数# w1.assign_sub表示原地更新,保持tf.Variablew1.assign_sub(lr * grads[0])b1.assign_sub(lr * grads[1])w2.assign_sub(lr * grads[2])b2.assign_sub(lr * grads[3])w3.assign_sub(lr * grads[4])b3.assign_sub(lr * grads[5])if step % 100 == 0:print(epoch,step, 'loss', float(loss))
(60000, 28, 28) (60000,) <dtype: 'float32'> <dtype: 'int32'>
tf.Tensor(0.0, shape=(), dtype=float32) tf.Tensor(1.0, shape=(), dtype=float32)
tf.Tensor(0, shape=(), dtype=int32) tf.Tensor(9, shape=(), dtype=int32)
batch: (128, 28, 28) (128,)
0 0 loss 0.3418075442314148
0 100 loss 0.20874373614788055
0 200 loss 0.19508568942546844
0 300 loss 0.17686240375041962
0 400 loss 0.17524364590644836
1 0 loss 0.1492575705051422
1 100 loss 0.15576913952827454
1 200 loss 0.15462367236614227
1 300 loss 0.14648546278476715
1 400 loss 0.14724934101104736
2 0 loss 0.12436133623123169
2 100 loss 0.13543009757995605
2 200 loss 0.13396985828876495
2 300 loss 0.1286272406578064
2 400 loss 0.13028298318386078
3 0 loss 0.10929928719997406
3 100 loss 0.12242629379034042
3 200 loss 0.12099750339984894
3 300 loss 0.11676524579524994
3 400 loss 0.11878874152898788
4 0 loss 0.09928615391254425
4 100 loss 0.11343791335821152
4 200 loss 0.11198092997074127
4 300 loss 0.10829611867666245
4 400 loss 0.11033062636852264
5 0 loss 0.09216360747814178
5 100 loss 0.1067122370004654
5 200 loss 0.10542497783899307
5 300 loss 0.10182454437017441
5 400 loss 0.1037207618355751
6 0 loss 0.08672191202640533
6 100 loss 0.10142513364553452
6 200 loss 0.10031310468912125
6 300 loss 0.09669476002454758
6 400 loss 0.09842309355735779
7 0 loss 0.0824439525604248
7 100 loss 0.09712380170822144
7 200 loss 0.09613628685474396
7 300 loss 0.09249486774206161
7 400 loss 0.09409850835800171
8 0 loss 0.07895340770483017
8 100 loss 0.09356103837490082
8 200 loss 0.09263540804386139
8 300 loss 0.08899327367544174
8 400 loss 0.09041593968868256
9 0 loss 0.07604382187128067
9 100 loss 0.09052439779043198
9 200 loss 0.08964134752750397
9 300 loss 0.08601444214582443
9 400 loss 0.08727019280195236
深度学习TF—1.TensorFlow2基本操作相关推荐
- 【深度学习】(6) tensorflow2.0使用keras高层API
各位同学好,今天和大家分享一下TensorFlow2.0深度学习中借助keras的接口减少神经网络代码量.主要内容有: 1. metrics指标:2. compile 模型配置:3. fit 模型训练 ...
- 深度学习之基于Tensorflow2.0实现AlexNet网络
在之前的实验中,一直是自己搭建或者是迁移学习进行物体识别,但是没有对某一个网络进行详细的研究,正好人工智能课需要按组上去展示成果,借此机会实现一下比较经典的网络,为以后的研究学习打下基础.本次基于Te ...
- 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)
音乐分类 前言 复现代码 MP3转mel CNN模型 训练结果 总结 前言 我在逛github的时候,偶然发现了一个项目:基于深度学习的音乐推荐.[VikramShenoy97].作者是基于CNN做的 ...
- [深度学习]人脸检测-Tensorflow2.x keras代码实现
人脸检测 1. 所需Python环境 2. 数据准备 3. 代码实现 3.1 用OpenCV实现 3.2 用深度学习实现目标检测 3.3. 最后在加一个图片 1. 所需Python环境 pip ins ...
- 深度学习-TF函数-layers.concatenate用法 numpy数组维度
环境: tensorfow 2.* def concatenate(inputs, axis=-1, **kwargs): axis=n表示从第n个维度进行拼接,对于一个三维矩阵,axis的取值可以为 ...
- 深度学习之基于Tensorflow2.0实现ResNet50网络
理论上讲,当网络层数加深时,网络的性能会变强,而实际上,在不断的加深网络层数后,分类性能不会提高,而是会导致网络收敛更缓慢,准确率也随着降低.利用数据增强等方法抑制过拟合后,准确率也不会得到提高,出现 ...
- 【深度学习】利用tensorflow2.0卷积神经网络进行卫星图片分类实例操作详解
本文的应用场景是对于卫星图片数据的分类,图片总共1400张,分为airplane和lake两类,也就是一个二分类的问题,所有的图片已经分别放置在2_class文件夹下的两个子文件夹中.下面将从这个实例 ...
- 深度学习环境配置TensorFlow2+Keras
Anaconda Anaconda是管理各个python包的工具,这里我们主要使用的是numpy,以及其他的一些常用包. Anaconda官网链接:https://www.anaconda.com/ ...
- 深度学习之基于Tensorflow2.0实现Xception网络
1.Xception网络简介 Xception网络是在2017提出的轻量型网络,兼顾了准确性和参数量,Xception----->Extreme(极致的) Inception. 2.创新点 引入 ...
- 深度学习之基于Tensorflow2.0实现InceptionV3网络
Inception网络是Google公司研发的,迄今为止有V1,V2,V3,V4四代,在V4这一代引入了残差网络的模型,本次主要介绍第三代-InceptionV3网络. 1. InceptionV3网 ...
最新文章
- SQL SERVER中的三种获得自增长ID的方法
- OpenGl 绘制一个立方体
- 【C/C++12】天气APP:不同数据建表入表,数据交换(exptables.cpp,ftpputfiles.cpp)
- 四元数和欧拉角的相互转换
- Docker学习总结(55)——Google和Facebook为什么不用Docker?
- 中国喷淋泵行业市场供需与战略研究报告
- Java 11 中 11 个不为人知的瑰宝
- 如何使用phpMyAdmin管理数据库
- eclipse编码方式、标签语言获取根目录
- Web基础知识之Web组件
- Vue - 中文汉字转拼音(工具函数封装)
- 没有寻线仪怎么找网线_乱七八糟的网线怎么找?寻线仪来帮你
- 基于 Spring Boot 的在线考试系统
- 课堂笔记:逻辑回归和鸢尾花数据集
- Pygame 官方文档 - pygame.cursors
- vsphere学习笔记系列-vmotion
- 服务器返回常见状态码及意义
- html实现web网页倾斜,导航倾斜样式如何用CSS实现_html/css_WEB-ITnose
- 寻找Archie服务器中的文件,Archie是什么
- wdr6500虚拟服务器,TP-Link TL-WDR6500双频无线路由器的安装教程
热门文章
- Java魔法堂:解读基于Type Erasure的泛型
- Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)
- Ruby on Rails 目录结构
- JavaScript学习笔记——正则验证
- Android Bitmap 开源图片框架分析(精华四)
- UITextField-IOS开发
- 二分图匹配匈牙利算法BFS实现
- Android开发中图表的使用
- 在回传时保持滚动位置
- Openfire Meetings插件是一个包含各种Jitsi项目(如VideoBridge和Meet)的实现