TensorFlow读书笔记
1 import tensorflow as tf 2 3 #设置参数w的随机初始值为5,设定为可训练(即vaiable形式?) 4 w = tf.Variable(tf.constant(5, dtype=tf.float32)) 5 #学习率 6 lr=0.2 7 #循环次数 8 epoch=40 9 10 for epoch in range(epoch): 11 with tf.GradientTape() as tape:#with结构到grad框起到了梯度计算的过程 12 loss=tf.square(w+1) #损失函数定义为w+1的平方 13 grads=tape.gradient(loss,w)#gradinet函数告知对谁求导 14 15 w.assign_sub(lr*grads) #assign_sub做自减,即w-= 16 print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss))
输出:
张量生成
tensorflow中的tensor就是张量,是多维数组(多维列表),用阶来表示张量的维数,判断张量是几阶的可以看有几个方括号。
数据类型 : tf.int tf.float , tf.bool , tf.string
图和创建一个张量tensor
import tensorflow as tf a=tf.constant([1,5],dtype=tf.int64) #直接打印a,会输出a的所有信息 print(a) #打印a的数据类型 print(a.dtype) #打印a的形状 print(a.shape)
很多时候数据是用numpy给出的,可以通tf.convert_to_tensor(数据名,dtype=数据类型(可选))将其转化为tensor数据类型
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)
其他张量创建方法
#创建全为0的张量 tf.zeros(维度) #创建全为1的张量 tf.ones(维度) #创建全为指定值的张量 tf.fill(维度,指定值)
生成随机数
生产正态分布的随机数,默认均值为0,标准差为1:tf.random.normal(维度,mean=均值,stddev=标准差)
生成截断式正态分布的随机数:tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
生成均匀分布随机数[minval,maxval),注意是前闭后开:tf.random.uniform(维度,minval=最小值,maxval=最大值)
d=tf.random.normal([2,2],mean=0.5,stddev=1) print(d) e=tf.random.truncated_normal([2,2],mean=0.5,stddev=1) print(e) f=tf.random.uniform([2,2],minval=0,maxval=1) print(f)
常用函数
强制tensor转换为该数据类型:tf.cast(张量名,dtype=数据类型 )
计算张量维度上元素的最小值:tf.reduce_min(张量名)
计算张量维度上的元素最大值:tf.reduce_max(张量名)
x1=tf.constant([1.,2.,3.],dtype=tf.float64) print(x1) x2=tf.cast(x1,tf.int32) print(tf.reduce_min(x2),'\n',tf.reduce_max(x2))
计算张量沿着指定方向的平均值:tf.reduce_mean(张量名,axis=操作轴)
计算张量沿着指定维度的和:tf.reduce_sum(张量名,axis=操作轴)