- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试手动创建逻辑回归模型,但 GradientTape 返回 NoneType 渐变
class LogisticRegressionTF:
def __init__(self,dim):
#dim = X_train.shape[0]
tf.random.set_seed(1)
weight_init = tf.initializers.VarianceScaling(scale=1.0, mode="fan_avg", distribution="uniform", seed=1)
zeros_init = tf.zeros_initializer()
self.W = tf.Variable(zeros_init([dim,1]), trainable=True, name="W")
self.b = tf.Variable(zeros_init([1]), trainable=True, name="b")
def sigmoid(self,z):
x = tf.Variable(z, trainable=True,dtype=tf.float32, name='x')
sigmoid = tf.sigmoid(x)
result = sigmoid
return result
def predict(self, x):
x = tf.cast(x, dtype=tf.float32)
h = tf.sigmoid(tf.add(tf.matmul(tf.transpose(self.W), x), self.b))
return h
def loss(self,logits, labels):
z = tf.Variable(logits, trainable=False,dtype=tf.float32, name='z')
y = tf.Variable(labels, trainable=False,dtype=tf.float32, name='y')
m = tf.cast(tf.size(z), dtype=tf.float32)
cost = tf.divide(tf.reduce_sum(y*tf.math.log(z) + (1-y)*tf.math.log(1-z)),-m)
return cost
def fit(self,X_train, Y_train, lr_rate = 0.01, epochs = 1000):
costs=[]
optimizer = tf.optimizers.SGD(learning_rate=lr_rate)
for i in range(epochs):
current_loss = self.loss(self.predict(X_train), Y_train)
print(current_loss)
with tf.GradientTape() as t:
t.watch([self.W, self.b])
currt_loss = self.loss(self.predict(X_train), Y_train)
print(currt_loss)
grads = t.gradient(currt_loss, [self.W, self.b])
print(grads)
#optimizer.apply_gradients(zip(grads,[self.W, self.b]))
self.W.assign_sub(lr_rate * grads[0])
self.b.assign_sub(lr_rate * grads[1])
if(i %100 == 0):
print('Epoch %2d: , loss=%2.5f' %(i, current_loss))
costs.append(current_loss)
plt.plot(costs)
plt.ylim(0,50)
plt.ylabel('Cost J')
plt.xlabel('Iterations')
log_reg = LogisticRegressionTF(train_set_x.shape[0])
log_reg.fit(train_set_x, train_set_y)
这会产生一个 TypeError,这是由于梯度返回 None
tf.Tensor(0.6931474, shape=(), dtype=float32)
tf.Tensor(0.6931474, shape=(), dtype=float32)
[None, None]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-192-024668d532b0> in <module>()
1 log_reg = LogisticRegressionTF(train_set_x.shape[0])
----> 2 log_reg.fit(train_set_x, train_set_y)
<ipython-input-191-4fef932eb231> in fit(self, X_train, Y_train, lr_rate, epochs)
40 print(grads)
41 #optimizer.apply_gradients(zip(grads,[self.W, self.b]))
---> 42 self.W.assign_sub(lr_rate * grads[0])
43 self.b.assign_sub(lr_rate * grads[1])
44 if(i %100 == 0):
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'
我的假设函数是 tf.sigmoid(tf.add(tf.matmul(tf.transpose(self.W), x), self.b))
我已手动将成本函数定义为 tf.divide(tf.reduce_sum(y*tf.math.log(z) + (1-y)*tf.math.log(1-z)),-m ),其中 m 是训练样本的数量
验证它是否将损失返回为 tf.Tensor(0.6931474, shape=(), dtype=float32)
我也做了一个 t.watch()
但什么也没发生,它仍然返回 [None, None]
train_set_y.dtype 是 dtype('int64')
train_set_x.dtype 是 dtype('float64')
train_set_x.shape 为 (12288, 209)
train_set_y.shape 为 (1, 209)
类型(train_set_x)是numpy.ndarray
我哪里出错了?
谢谢
最佳答案
在我的环境中,Tensorflow 正在Eagerly
运行,即它处于 Eager Execution 状态。我们可以使用 tf.executing_eagerly() 来检查这一点,以便启用急切执行,它返回 True
问题出在 loss(self,logits, labels):
函数
Logits 不应该是 `tf.Variable(...)'
它应该更改为 z = logits
,并且 logits 应被视为 Tensor 对象而不是 tf.Variable 对象。
我还将 tf.divide 更改为 Eager 模式(尽管不是必需的)
之前:
def loss(self,logits, labels):
z = tf.Variable(logits, trainable=False,dtype=tf.float32, name='z')
y = tf.Variable(labels, trainable=False,dtype=tf.float32, name='y')
m = tf.cast(tf.size(z), dtype=tf.float32)
cost = tf.divide(tf.reduce_sum(y*tf.math.log(z) + (1-y)*tf.math.log(1-z)),-m)
return cost
之后:
def loss(self,logits, labels):
z = logits
y = tf.constant(labels,dtype=tf.float32, name='y')
m = tf.cast(tf.size(z), dtype=tf.float32)
cost = (-1/m)*tf.reduce_sum(y*tf.math.log(z) + (1-y)*tf.math.log(1-z))
return cost
关于python - TensorFlow 2.0 GradientTape 返回 None 作为手动模型的梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59957233/
在查看 Tensorflow 1.15 中的 OptimizerV2 代码时,我注意到他们使用 backprop.GradientTape 来计算梯度。 我找不到任何关于此类的在线引用,只能找到 tf
晚上好 我想使用 tf2 和 Gradient Tape 函数为一个简单的回归问题实现一个玩具示例。使用 Model.fit 它可以正确学习,但与 GradientTape 一样可以做一些事情,但与
晚上好 我想使用 tf2 和 Gradient Tape 函数为一个简单的回归问题实现一个玩具示例。使用 Model.fit 它可以正确学习,但与 GradientTape 一样可以做一些事情,但与
背景 在 Tensorflow 2 中,存在一个名为 GradientTape 的类。它用于记录对张量的操作,然后可以将其结果微分并馈送到一些最小化算法。例如,from the documentati
我想使用GradientTape在急切执行模式下观察梯度。是否可以创建一个 GradientTape 一次,然后记录所有内容,就好像它具有全局上下文一样? 这是我想做的一个例子: import num
我正在尝试计算 TensorFlow 神经网络输出相对于其输入的雅可比行列式。使用 tf.GradientTape.jacobian 方法可以轻松实现这一点。 TensorFlow 文档中提供的简单示
我试图在每个时期更新权重,但我正在分批处理数据。问题是,为了规范化损失,我需要在训练循环之外记录 TensorFlow 变量(以进行跟踪和规范化)。但是当我这样做时,训练时间很长。 我认为,它将所有批
按照以下代码连接了 3 个神经网络,我们如何从初始网络中获取两个梯度?第一个梯度有效,但第二个梯度返回 None 张量。似乎它们彼此无关以获得梯度。我该如何解决这个问题? with tf.Gradie
我尝试在 Eager 模式下使用 Tensorflow 计算梯度,但是tf.GradientTape () 仅返回 None 值。我不明白为什么。梯度在 update_policy() 函数中计算。
我正在尝试使用 tf.GradientTape 计算梯度。当我尝试使用损失和 Model.variables (tf.keras.Model) 作为输入时,结果以 None 数组的形式返回给我。我究竟
我使用 tf.GradientTape 训练逻辑回归,但它无法收敛 import numpy as np import tensorflow as tf from tensorflow import
我想使用 keras 的预训练模型进行迁移学习 import tensorflow as tf from tensorflow import keras base_model = keras.appl
你好, 我目前正尝试在 Tensorflow 1.13.1 中计算梯度并使用 GradientTape official documentation 中解释的类, 但我得到一个 TypeError:
我正在尝试对使用 SavedModel 加载的模型进行对抗性攻击API。我想针对给定目标的模型损失对输入进行梯度下降。代码有点长,但它是说明问题的最低限度。 from __future__ impor
我在使用 TensorFlow 中的自动微分计算梯度时遇到问题。基本上我想创建一个神经网络,它只有一个输出值 f 并获得两个值(x,t)的输入。网络应该像一个数学函数,所以在这种情况下 f(x,t)
我发现计算的梯度取决于 tf.function 装饰器的相互作用,如下所示。 首先,我为二元分类创建了一些合成数据 tf.random.set_seed(42) np.random.seed(42)
我正在尝试切换到 TensorFlow 热切模式,我找到了 GradientTape 的文档, implicit_gradients , gradients_function和 implicit_va
我开始学习 Tensorflow2.0,我困惑的一个主要来源是什么时候使用 keras-like model.compile vs tf.GradientTape 训练模型。 在用于 MNIST 分类
在 tensorflow 版本 2.0.0-beta1 中,我正在尝试实现一个 keras 层,它具有从正态随机分布中采样的权重.我想将分布的均值作为可训练参数。 感谢 tensorflow-prob
当我使用 tf.Variable 的分配方法来更改变量的值时,它会阻止 tf.Gradient,例如。例如,请参阅下面的玩具示例代码: (注意:我只对 TensorFlow 2 感兴趣。) x = t
我是一名优秀的程序员,十分优秀!