首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GradientTape训练基本TensorFlow模型

使用GradientTape训练基本TensorFlow模型
EN

Stack Overflow用户
提问于 2021-04-01 18:38:58
回答 1查看 46关注 0票数 0

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

因此,我将[0,1]x[0,1]中的一些点存储在形状(250, 2, 1)的张量x中,并将相应的标签(1. or 0.)存储在形状(250,1,1)的张量y中。那我就这么做

代码语言:javascript
复制
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])

我得到的是预期形状的张量列表,但只包含零。有谁有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-02 05:49:38

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66902993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档