tensorflow
不断更新,建议收藏!
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环境,Windows下
conda activate [NAME]
#激活环境,进入NAME环境,Linux下
source conda activate [NAME]
#推出虚拟环境
conda deactivate [NAME]
#安装tensorflow
pip install tensorflow==2.1
1.2.3. 测试
#进入python
python
#导入tensorflow
import tensorflow as tf
tf.__version__
#显示所有环境名字envs
1.2.4.卸载虚拟环境
conda remove -n [name] --all
2. 安装pycharm
Step1:社区版pycharm,环境变量选上,重启电脑
Step2:pycharm环境配置
- 新建工程
- 设置环境变量
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)
结果分析:张量的形状看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,则对所有元素进行操作
- tf.matmul
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表示非
表示:
tf.one_not(待转换数据,depth=几分类): 将待转换数据直接转换为独热编码格式
3.1.9 分类问题独热编码
分类问题中,神经网络完成前向传播,计算出每种类型的可能性大小,但是输出的y值只有符合概率分布后才能与独热码的标签做比较,使用公式(softmax激活函数)转换使输出符合概率分布
softmax函数: tf.nn.softmax(x)
,使n分类的n个输出符合概率分布,也就是每个输出值变为0到1之间的概率值,这些概率的和为1
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
表示纬度、横向