文章目录

  • 一、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基本操作相关推荐

  1. 【深度学习】(6) tensorflow2.0使用keras高层API

    各位同学好,今天和大家分享一下TensorFlow2.0深度学习中借助keras的接口减少神经网络代码量.主要内容有: 1. metrics指标:2. compile 模型配置:3. fit 模型训练 ...

  2. 深度学习之基于Tensorflow2.0实现AlexNet网络

    在之前的实验中,一直是自己搭建或者是迁移学习进行物体识别,但是没有对某一个网络进行详细的研究,正好人工智能课需要按组上去展示成果,借此机会实现一下比较经典的网络,为以后的研究学习打下基础.本次基于Te ...

  3. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)

    音乐分类 前言 复现代码 MP3转mel CNN模型 训练结果 总结 前言 我在逛github的时候,偶然发现了一个项目:基于深度学习的音乐推荐.[VikramShenoy97].作者是基于CNN做的 ...

  4. [深度学习]人脸检测-Tensorflow2.x keras代码实现

    人脸检测 1. 所需Python环境 2. 数据准备 3. 代码实现 3.1 用OpenCV实现 3.2 用深度学习实现目标检测 3.3. 最后在加一个图片 1. 所需Python环境 pip ins ...

  5. 深度学习-TF函数-layers.concatenate用法 numpy数组维度

    环境: tensorfow 2.* def concatenate(inputs, axis=-1, **kwargs): axis=n表示从第n个维度进行拼接,对于一个三维矩阵,axis的取值可以为 ...

  6. 深度学习之基于Tensorflow2.0实现ResNet50网络

    理论上讲,当网络层数加深时,网络的性能会变强,而实际上,在不断的加深网络层数后,分类性能不会提高,而是会导致网络收敛更缓慢,准确率也随着降低.利用数据增强等方法抑制过拟合后,准确率也不会得到提高,出现 ...

  7. 【深度学习】利用tensorflow2.0卷积神经网络进行卫星图片分类实例操作详解

    本文的应用场景是对于卫星图片数据的分类,图片总共1400张,分为airplane和lake两类,也就是一个二分类的问题,所有的图片已经分别放置在2_class文件夹下的两个子文件夹中.下面将从这个实例 ...

  8. 深度学习环境配置TensorFlow2+Keras

    Anaconda Anaconda是管理各个python包的工具,这里我们主要使用的是numpy,以及其他的一些常用包. Anaconda官网链接:https://www.anaconda.com/ ...

  9. 深度学习之基于Tensorflow2.0实现Xception网络

    1.Xception网络简介 Xception网络是在2017提出的轻量型网络,兼顾了准确性和参数量,Xception----->Extreme(极致的) Inception. 2.创新点 引入 ...

  10. 深度学习之基于Tensorflow2.0实现InceptionV3网络

    Inception网络是Google公司研发的,迄今为止有V1,V2,V3,V4四代,在V4这一代引入了残差网络的模型,本次主要介绍第三代-InceptionV3网络. 1. InceptionV3网 ...

最新文章

  1. SQL SERVER中的三种获得自增长ID的方法
  2. OpenGl 绘制一个立方体
  3. 【C/C++12】天气APP:不同数据建表入表,数据交换(exptables.cpp,ftpputfiles.cpp)
  4. 四元数和欧拉角的相互转换
  5. Docker学习总结(55)——Google和Facebook为什么不用Docker?
  6. 中国喷淋泵行业市场供需与战略研究报告
  7. Java 11 中 11 个不为人知的瑰宝
  8. 如何使用phpMyAdmin管理数据库
  9. eclipse编码方式、标签语言获取根目录
  10. Web基础知识之Web组件
  11. Vue - 中文汉字转拼音(工具函数封装)
  12. 没有寻线仪怎么找网线_乱七八糟的网线怎么找?寻线仪来帮你
  13. 基于 Spring Boot 的在线考试系统
  14. 课堂笔记:逻辑回归和鸢尾花数据集
  15. Pygame 官方文档 - pygame.cursors
  16. vsphere学习笔记系列-vmotion
  17. 服务器返回常见状态码及意义
  18. html实现web网页倾斜,导航倾斜样式如何用CSS实现_html/css_WEB-ITnose
  19. 寻找Archie服务器中的文件,Archie是什么
  20. wdr6500虚拟服务器,TP-Link TL-WDR6500双频无线路由器的安装教程

热门文章

  1. Java魔法堂:解读基于Type Erasure的泛型
  2. Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)
  3. Ruby on Rails 目录结构
  4. JavaScript学习笔记——正则验证
  5. Android Bitmap 开源图片框架分析(精华四)
  6. UITextField-IOS开发
  7. 二分图匹配匈牙利算法BFS实现
  8. Android开发中图表的使用
  9. 在回传时保持滚动位置
  10. Openfire Meetings插件是一个包含各种Jitsi项目(如VideoBridge和Meet)的实现