微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 GradientTape 训练基本的 TensorFlow 模型

如何解决使用 GradientTape 训练基本的 TensorFlow 模型

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

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

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,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])

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?