这一系列的文章是【北京大学】Tensorflow2.0_哔哩哔哩_bilibili的笔记,这系列课程讲得很好,推荐观看。话不多说直接放代码:
#导入需要的库:
import tensorflow as tf
import numpy as np
#类型转换:tf.cast
a= tf.constant([1,2,3]) #默认为int32
b= tf.cast(a, dtype= tf.float64) #转换为float64
print(b)
tf.reduce_max(a) #得到最大值
tf.reduce_min(a) #最小值
a= tf.constant([[1,2,3],[5,1,6]])
tf.reduce_max(a, axis= 0) #表示跨行,即求出每列最大值
tf.reduce_max(a, axis= 1) #跨列
tf.reduce_sum(a, axis= 0) #求和
tf.reduce_mean(a, axis= 1) #均值
#常用运算符: tf.add, tf.subtract, tf.multiply, tf.divide, tf.square, tf.pow, #tf.sqrt, tf.matmul
a= tf.fill([3, 2], 3.)
b= tf.ones([2, 3])
#注意matmul中两个矩阵数值类型必须相同,而tf.ones默认是float32,因此a中3后面的点不能省略,否则会因为a是int32类型而导致矩阵乘法出错
tf.matmul(a, b) #矩阵a和矩阵b相乘
#接下来是训练过程中常用的函数:
features= tf.constant([[1,2],[3,4],[5,6],[7,8]])
labels= tf.constant([1,0,0,1])
dataset= tf.data.Dataset.from_tensor_slices((features, labels)) #创建数据集,#features和labels对应
#这个函数可以理解为分别创建了特征和标签之后将其对应连接起来
for element in dataset:
print(element) #打印出特征-标签对
#tf.Variable()生成一个可训练的变量,此变量在反向传播中会根据梯度情况不断改变自身的值,可用来生成神经网络中的权重矩阵
w= tf.Variable([1,2,3], dtype= tf.float32)
#tf.GradientTape(): #求梯度,反向传播中常用的函数
with tf.GradientTape() as tape:
w= tf.Variable(tf.constant(3.0)) #生成一个变量w
loss= tf.pow(w, 2) #定义关于变量w的损失函数
grad= tape.gradient(loss, w) #求出损失函数对w的梯度(导数)
print(grad) #打印此梯度(导数)
#enumerate():注意是python的内建函数不是tf的函数,用于生成索引-元素对,常用于for循环中
seq= ['one', 'two', 'three']
for i, element in enumerate(seq):
print(i ,element)
#tf.one_hot():独热编码
labels= tf.constant([1,2,3])
classes= 3 #分类数
output= tf.one_hot(labels, depth= classes)
output
#tf.nn.softmax: softmax激活函数
y= tf.constant([1, 2, -0.5])
y_prob= tf.nn.softmax(y)
y_prob
#assign_sub: 自减
w= tf.Variable(4)
w.assign_sub(1) #w= w-1
print(w) #3
#tf.argmax: 返回最大值索引
a= np.array([[1,2,3],[2,3,4],[5,4,3],[8,5,2]])
tf.argmax(a, axis= 0) #每列最大值的索引
tf.argmax(a, axis= 1) #每行最大值索引