该博客为自己学习笔记记录
详细学习视频见:
北京大学TF2.0教学视频(B站)
import tensorflow as tf
import numpy as np
p17
a=tf.constant([1,5],dtype=tf.int64)#定义一个张量,以及他的数据类型
print("a:",a)
print("a.dtype:",a.dtype)
print("a.shape:",a.shape)
p18
a=np.arange(0,5)#0,1,2,3,4
b=tf.convert_to_tensor(a,dtype=tf.int64)#转换张量的形式
print(a)
print(b)
p19
a=tf.zeros([2,3])#数据为0
b=tf.ones(4)#数据为1的一维张量
c=tf.fill([2,2],10)#指定数据的张量
print(a)
print(b)
print(c)
p21
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)#截断式正态分布,更向均值0.5集中
print(e)
p22
f=tf.random.uniform([10],minval=-10,maxval=10,dtype=tf.int64)#均匀分布,可设定最大值最小值,以及相应的数据类型
print(f)
p23
x1=tf.constant([1.2,2.2,3.3],dtype=tf.float64)
print(x1)
x2=tf.cast(x1,tf.int32)#强制类型转换
print(x2)
print(tf.reduce_min(x2))#找出最小值
print(tf.reduce_max(x1))#找出最大值
p25
x=tf.constant([[1,2,3,4,5],[9,7,6,5,4]],dtype=tf.float32)
print(x)
print(tf.reduce_mean(x,axis=0))#求均值
print(tf.cast(tf.reduce_sum(x,axis=1),tf.int32))#求和
# 不指定axis则所有元素参与计算
p29
a=tf.ones([2,4])
b=tf.fill([2,4],9.)
print(a)
print(b)
print(tf.add(a,b))
print(tf.subtract(a,b))
print(tf.multiply(a,b))
print(tf.divide(b,a))
p30
a=tf.fill([2,3],5.)
print(a)
print(tf.pow(a[1],3))
print(tf.square(a))
print(tf.sqrt(a))
#将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息。神经网络训练中常用该函数标记待训练的参数
w=tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
p31
a=tf.ones([3,2],dtype=tf.int32)
b=tf.fill([2,3],5)
c=tf.matmul(a,b)
print(a)
print(b)
print(c)
p33
# 切分传入张量的第一维度,生成输入特征/标签对,构建数据集
# data=tf.data.Dataset.from_tensor_slices((输入特征,标签))
features=tf.constant([12,23,10,17])
labels=tf.constant([0,1,1,0])
dataset=tf.data.Dataset.from_tensor_slices((features,labels))
print(dataset)
for element in dataset:
print(element)
p34
# with结构记录计算过程,gradient求出张量的梯度
# with tf.GradientTape() as tape:
# 若干个计算过程
# grad=tape.gradient(函数,对谁求导)
with tf.GradientTape() as tape:
w=tf.Variable(tf.constant(3.0))
loss=tf.pow(w,2)
grad=tape.gradient(loss,w)
print(grad)
p35
# 枚举
# enumerate(列表名)
seq=[1,2,3,4]
for i,element in enumerate(seq):
print(i,element)
p37
# 在分类问题中,常用独热码做标签
# 标记分类:1表示是,0表示非
# tf.one_hot()函数将待转换的数据转换为one—hot形式的数据输出
# tf.one_hot(待转换数据,depth=几分类)
classes=3#三分类
labels=tf.constant([1,0,2])
output=tf.one_hot(labels,depth=classes)
print(output)
p38
# tf.nn.softmax实现将分类转化为和为1的概率值
y=tf.constant([2.34,4.21,6.445,9.41],dtype=tf.float64)
y_pro=tf.nn.softmax(y)
print(y)
print(y_pro)
print(tf.reduce_sum(y_pro))
p39
x1 = tf.constant([[5.8, 4.0, 1.2, 0.2]]) # 5.8,4.0,1.2,0.2(0)
w1 = tf.constant([[-0.8, -0.34, -1.4],
[0.6, 1.3, 0.25],
[0.5, 1.45, 0.9],
[0.65, 0.7, -1.2]])
b1 = tf.constant([2.52, -3.1, 5.62])
y=tf.matmul(x1,w1)+b1
print(y)
#降维(去掉y中的纬度1)
y=tf.squeeze(y)
print(y)
y_pro=tf.nn.softmax(y)
print(y_pro)
print(tf.reduce_sum(y_pro))
p40
# assign_add相当于自增操作,首先要将变量设置为Variable
x=tf.Variable(4)
x.assign_add(1)
x.assign_sub(2)
print(x)
p41
test=tf.constant([[1, 2, 3], [2, 3, 4], [5, 4, 3], [8, 7, 2]])
print(test)
print(tf.argmax(test,axis=0))#返回的是索引(位置
print(tf.argmin(test,axis=1))
print(tf.argsort(test,axis=1))