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)