深度学习tensorflow学习笔记

tensorflow

  • 1.安装
    • 1.1 Anaconda安装
    • 1.2 安装tensorflow
      • 1.2.1 使用国内清华镜像
      • 1.2.2 安装tensorflow
      • 1.2.3. 测试
  • 2. 安装pycharm
  • 3. Tensor
    • 3.1 如何创建一个张量
      • 3.1.1 指定值张量生成
      • 3.1.2 随机张量生成
      • 3.1.3 `常用函数`
      • 3.1.4 数学运算函数
      • 3.1.5 数据与标签配对
      • 3.1.6 求导函数
      • 3.1.7 枚举函数
      • 3.1.8 独热编码
      • 3.1.9 `分类问题独热编码`
      • 3.1.10 参数自更新


不断更新,建议收藏


1.安装

1.1 Anaconda安装

验证anaconda是否安装成功的方法,在anaconda prompt中输入

conda --version

1.2 安装tensorflow

1.2.1 使用国内清华镜像

#连接清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/     
conda config --set show_channel_urls yes

1.2.2 安装tensorflow

#创建python环境
conda create -n tensorflow python=3.5.2
#激活环境,进入NAME环境
conda activate [NAME]
#安装tensorflow
pip install tensorflow == 2.1

1.2.3. 测试

#进入python
python
#导入tensorflow
import tensorflow as tf
tf.__version__

2. 安装pycharm

Step1:社区版pycharm,环境变量选上,重启电脑

Step2:pycharm环境配置

  • 新建工程
  • 设置环境变量
    深度学习tensorflow学习笔记_第1张图片

3. Tensor

Tensor是张量,实际上是一个多维数组,多维列表,用阶表示张量的维数

维数 名字 例子
0-D 0 标量 s=123
1-D 1 向量 v=[1,2,3]
2-D 2 矩阵 m=[[1,2,3],[4,5,6],[7,8,9]]
n-D n 张量 t=[[[

判断张量是几阶,就看方括号有几个,0个是0阶,张量可以表示0阶到n阶的数组

数据类型

tf.int,tf.float
tf.int 32,tf.float32,tf.float 64,32位整型、32位浮点、64位浮点
tf.bool
tf.constant([True,False])
tf.string
tf.constant(“hello”)

3.1 如何创建一个张量

Step1: 使用constant创建一个张量tf.constant(张量内容,dtype=数据类型)

import tensorflow as tf
a  = tf.constant([1,5],dtype=tf.int64)#创建一阶张量,数据类型为64位整型
print(a)
print(a.dtype)
print(a.shape)

深度学习tensorflow学习笔记_第2张图片
结果分析:张量的形状看shape的逗号隔开了几个数字,张量就是几维的。所以该张量就是一维的,数字为2说明张量有两个元素,shape(2,5)说明是两维的,2行5列

Step2: 将numpy的数据类型转化为Tensor数据类型(tf.convert_to_tensor(数据名,dtype=数据类型(可选)))

import tensorflow as tf
import numpy as np
a = np.arange(0,5)
b = tf.convert_to_tensor(a,dtype=tf.int64)
print(a)
print(b)

运行结果

3.1.1 指定值张量生成

  • tf.zeros(维度):创建全为0的张量
  • tf.ones(维度):创建全为1的张量
  • tf.fill(维度,指定值):创建全为指定值的张量。c=tf.fill([2,2],9),即使是一维也要写[],fill函数输入的是dim,zeros和ones输入的是shape
    • 一维直接写个数
    • 二维用[行,列]
    • 多维用[n,m,j,k,……]

3.1.2 随机张量生成

生成正态分布的随机数,默认均值为0,标准差为1

  • tf.random.normal(维度,mean = 均值,stddev = 标准差)
    生成截断式正态分布的随机数(使随机数更集中一些)

  • tf.random.truncated_normal(维度,mean = 均值,stddev = 标准差),保证生成的随机数在均值正负两倍标准差之内

3.1.3 常用函数

  • tf.cast(张量名,dtype=数据类型):强制tensor转换数据类型
  • tf.reduce_min(张量名):计算张量维度上的最小值
  • tf.reduce_max(张量名):计算张量维度上的最大值
  • tf.reduce_mean(张量名,axis=操作轴)
  • tf.reduce_sum(张量名,axis=操作轴)
  • tf.Variable() 将变量标记为可训练的,被标记的变量会在反向传播中记录梯度信息,神经网络训练中常用这个函数标记待训练的参数
#神经网络初始化参数w,首先,随机生成正态分布随机数,再给生成的随机数标记为可训练,在反向传播中通过梯度下降更新参数w
w = tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))

3.1.4 数学运算函数

四则运算
  • td.add,tf.subtract,tf.multiply,tf.divide
    只有维度相同的张量才可以做四则运算

    • tf.add()
    • tf.subtract()
    • tf.multiply()
    • tf.divide()
      平方、次方与开方
    • tf.suqare,tf.pow,tf.sqrt
矩阵乘
  • tf.matmul
    对于一个二维张量或者数据来说,通过axis
    • axis:控制操作的方向
    • axis=0表示对第一个维度操作,
    • axis=1表示对第二个维度进行操作,axis=0表示纵向操作,axis=1表示横向操作,不指定axis,则对所有元素进行操作
col col0 col1 col2 col3 col4
row0
row1
row2

3.1.5 数据与标签配对

神经网络在训练时,是把输入特征和标签配对后喂入网络的
tf.data.Dataset.from_tensor_slices

切分传入张量的第一维度,生成输入特征/标签对,构建数据集

3.1.6 求导函数

tf.GradientTape:实现某个函数对指定参数的求导运算,结合variable函数实现损失函数loss对参数w的求导数计算

使用with结构记录计算过程,gradient求出张量的梯度
求梯度

3.1.7 枚举函数

enumerate是枚举,可以枚举出每一个元素,并在元素前配上对应的索引号,组合为索引元素,常在for循环中使用 enumerate(列表名)

seq=['one','two','three']
for i,element in enumerate(seq):
  print(i,elment)

3.1.8 独热编码

在分类问题中,使用独热编码做标签,1表示是,0表示非
深度学习tensorflow学习笔记_第3张图片
表示:

tf.one_not(待转换数据,depth=几分类): 将待转换数据直接转换为独热编码格式
深度学习tensorflow学习笔记_第4张图片

3.1.9 分类问题独热编码

分类问题中,神经网络完成前向传播,计算出每种类型的可能性大小,但是输出的y值只有符合概率分布后才能与独热码的标签做比较,使用公式(softmax激活函数)转换使输出符合概率分布

softmax函数: tf.nn.softmax(x),使n分类的n个输出符合概率分布,也就是每个输出值变为0到1之间的概率值,这些概率的和为1
深度学习tensorflow学习笔记_第5张图片

3.1.10 参数自更新

assign_sub函数用于参数的自更新,等待更新的参数w要先被指定为可更新更训练,即在调用assign_sub前,先用tf.Variable 定义变量w为可训练,才能实现自更新
w.assign_sub(要自减的内容):w.assign_sub(1)表示w=w-1

返回指定操作轴(维度)方向最大值的索引号

tf.argmax(张量名,axis=操作轴)

  • axis=0表示经度、纵向
  • axis=1表示纬度、横向

你可能感兴趣的:(深度学习tensorflow学习笔记)