【发布时间】:2020-04-19 04:10:44
【问题描述】:
我有一个逻辑回归模型,我参考这个link
标签是一个布尔值(0 或 1 作为值)。
在这种情况下我们需要对标签进行 one_hot 编码吗?
问的原因:我使用下面的函数来找到 cross_entropy 并且损失总是为零。
def cross_entropy(y_true, y_pred):
y_true = tf.one_hot([y_true.numpy()], 2)
print(y_pred)
print(y_true)
loss_row = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_pred)
print('Loss')
print(loss_row)
return tf.reduce_mean(loss_row)
编辑:- 渐变将 [None,None] 作为返回值(用于以下代码)。
def grad(x, y):
with tf.GradientTape() as tape:
y_pred = logistic_regression(x)
loss_val = cross_entropy(y, y_pred)
return tape.gradient(loss_val, [w, b])
示例值
loss_val => tf.Tensor(307700.47, shape=(), dtype=float32)
w => tf.Variable 'Variable:0' shape=(171, 1) dtype=float32, numpy= 数组([[ 0.7456649 ], [-0.35111237],[-0.6848465 ],[ 0.22605407]]
b => tf.Variable 'Variable:0' shape=(1,) dtype=float32, numpy=array([1.1982833], dtype=float32)
【问题讨论】:
-
在二元逻辑回归的情况下,您不需要 one_hot 编码。一般用于多项逻辑回归。
-
在参考中,fashion_mnist 数据集有 10 个标签(即 0-9),因此它需要 one_hot 编码,而在您的情况下它只有两个标签(例如:是:1 或否:0 或反之亦然),因此不需要 one_hot 编码。
标签: tensorflow machine-learning label one-hot-encoding