【问题标题】:Training a basic TensorFlow Model using the GradientTape使用 GradientTape 训练一个基本的 TensorFlow 模型
【发布时间】:2021-06-28 08:41:12
【问题描述】:

出于教育目的,我试图在 TensorFlow 主页上的 Basic training loops 教程的基础上创建一个简单的神经网络,用于对平面中的点进行分类。

所以,我在[0,1]x[0,1] 中有一些点存储在形状为(250, 2, 1) 的张量x 中,相应的标签(1. or 0.) 存储在形状为y 的张量y 中。然后我做

import tensorflow as tf

w0 = tf.Variable(tf.random.normal([4,2]), name = 'w0')
w1 = tf.Variable(tf.random.normal([1,4]), name = 'w1')
b1 = tf.Variable(tf.zeros([4,1]), name = 'b1')
b2 = tf.Variable(tf.zeros([1,1]), name = 'b2')

loss = tf.keras.losses.CategoricalCrossentropy()

def forward(x):
  x0 = x
  z1 = tf.matmul(w0, x0) + b1
  x1 = tf.nn.relu(z1)
  z2 = tf.matmul(w1, x1) + b2
  x2 = tf.nn.sigmoid(z2)
  return x2

with tf.GradientTape() as t:
    current_loss = loss(y, forward(x))

gradients = t.gradient(current_loss, [b1, b2, w0, w1])

我得到的是一个预期形状的张量列表,但只包含零。有人给点建议吗?

【问题讨论】:

  • None 好零!你期待什么?

标签: python tensorflow neural-network classification gradienttape


【解决方案1】:

出现问题是因为标签/预测没有预期的形状。特别是,损失函数tf.keras.losses.CategoricalCrossentropy 期望标签以单热表示形式提供,但您的标签和预测具有形状(250, 1, 1),并且在这种情况下损失函数的行为尚不清楚。改用tf.keras.losses.BinaryCrossentropy 应该可以解决问题。

【讨论】:

  • 非常感谢。 One-Hot 对我的标签进行了编码,一切正常!
猜你喜欢
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2017-05-15
  • 2020-01-03
相关资源
最近更新 更多