TensorFlow2_200729系列---15、交叉熵求梯度实例
一、总结
一句话总结:
loss = tf.reduce_mean(tf.losses.categorical_crossentropy(tf.one_hot(y,depth=2), logits, from_logits=True))
1、测试例子中输入x=tf.random.normal([1,3]),x是[1,3]和[2,3]分别表示什么意思?
x是[1,3]:前面的1表示是一个输入(对应的y就是一个),后面的3表示下一层三个节点
x是[2,3]:前面的2表示是2个输入(对应的y就是两个),后面的3表示下一层三个节点
二、交叉熵求梯度实例
博客对应课程的视频位置:
import tensorflow as tf tf.random.set_seed(4323) # 这里的[1,3]表示只有一个输入 # 如果这里是2,3,表示的就是两个输入 # 如果这里是两个输入,那么y的真实值(label)也要是两个 x=tf.random.normal([1,3]) w=tf.random.normal([3,2]) b=tf.random.normal([2]) y = tf.constant([0]) with tf.GradientTape() as tape: tape.watch([w, b]) logits = (x@w+b) print(logits) loss = tf.reduce_mean(tf.losses.categorical_crossentropy(tf.one_hot(y,depth=2), logits, from_logits=True)) grads = tape.gradient(loss, [w, b]) print('w grad:', grads[0]) print('b grad:', grads[1])
tf.Tensor([[ 0.09070531 -0.5579208 ]], shape=(1, 2), dtype=float32) w grad: tf.Tensor( [[-0.12150346 0.12150346] [-0.47514102 0.47514102] [-0.30336627 0.30336627]], shape=(3, 2), dtype=float32) b grad: tf.Tensor([-0.3432992 0.3432992], shape=(2,), dtype=float32)