首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在拟合和预测模型之前将logits传递给sigmoid_cross_entropy_with_logits?

如何在拟合和预测模型之前将logits传递给sigmoid_cross_entropy_with_logits?
EN

Stack Overflow用户
提问于 2020-04-03 21:14:07
回答 1查看 423关注 0票数 3

因为我需要训练一个具有多个标签的模型,所以我需要使用loss function tf.nn.sigmoid_cross_entropy_with_logits。此函数有两个参数:logitsloss

参数logitsis是预测y的值吗?我如何在编译模型之前传递这个值呢?在编译和拟合模型之前,我不能预测y,对吧?

这是我的代码:

代码语言:javascript
复制
import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([keras.layers.Dense(50, activation='tanh', input_shape=[100]), 
                            keras.layers.Dense(30, activation='relu'),
                            keras.layers.Dense(50, activation='tanh'),
                            keras.layers.Dense(100, activation='relu'),
                            keras.layers.Dense(8)])

model.compile(optimizer='rmsprop', 
              loss=tf.nn.sigmoid_cross_entropy_with_logits(logits=y_pred), labels=y),   # <---How to figure out y_pred here?
              metrics=['accuracy'])
model.fit(x, y, epochs=10, batch_size=32)
y_pred = model.predict(x)  # <--- Now I got y_pred after compile, fit and predict

我使用的是tensorflow v2.1.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 22:22:00

这些参数(labelslogits)被传递给Keras实现中的loss函数。要让你的代码像这样工作:

代码语言:javascript
复制
import tensorflow as tf
from tensorflow import keras


def loss_fn(y_true, y_pred):
    return tf.nn.sigmoid_cross_entropy_with_logits(labels=y_true, logits=y_pred)

model = keras.Sequential([keras.layers.Dense(50, activation='tanh', input_shape=[100]), 
                          keras.layers.Dense(30, activation='relu'),
                          keras.layers.Dense(50, activation='tanh'),
                          keras.layers.Dense(100, activation='relu'),
                          keras.layers.Dense(8)])

model.compile(optimizer='rmsprop', 
              loss=loss_fn,
              metrics=['accuracy'])
x = np.random.normal(0, 1, (64, 100))
y = np.random.randint(0, 2, (64, 8)).astype('float32')
model.fit(x, y, epochs=10, batch_size=32)
y_pred = model.predict(x)

不过,建议的方法是使用Keras的loss实现。在您的情况下,它将是:

代码语言:javascript
复制
model = keras.Sequential([keras.layers.Dense(50, activation='tanh', input_shape=[100]), 
                          keras.layers.Dense(30, activation='relu'),
                          keras.layers.Dense(50, activation='tanh'),
                          keras.layers.Dense(100, activation='relu'),
                          keras.layers.Dense(8)])

model.compile(optimizer='rmsprop', 
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])
x = np.random.normal(0, 1, (64, 100))
y = np.random.randint(0, 2, (64, 8)).astype('float32')
model.fit(x, y, epochs=10, batch_size=32)
y_pred = model.predict(x)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61012727

复制
相关文章

相似问题

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