python-3.x - 具有分类交叉熵损失的多类预测
问题描述
假设这个例子实现了一个简单的二元分类。
X = 数组([[1,2,3],[2,3,4],[3,4,5]])
y = 数组([0],[1],[0])
...
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(X, y, epochs=50, verbose=0)
# new instance where we do not know the answer
Xnew = array([[4, 5, 6]])
# make a prediction
ynew = model.predict(Xnew)
#show the inputs and predicted outputs
print("X=%s, Predicted=%s" % (Xnew[0], ynew[0]))
...
results
X=[4, 5, 6], Predicted=[0 or 1]
而这个实现了多类分类。
X = 数组([[1,2,3],[2,3,4],[3,4,5]])
y = 数组([4],[5],[6])
...
model.compile(loss='categorical_crossentropy', optimizer='adam')
# fit model
model.fit(X, y, epochs=50, verbose=2)
model.reset_states()
# evaluate model on new data
yhat = model.predict((X))
...
results decoded
X=[4, 5, 6], Predicted=[4, 5, 6]
如何使用单个输出实现多类分类以获得这样的结果?(类似于预测时间序列)
X = 数组([[1,2,3],[2,3,4],[3,4,5]])
y = 数组([4],[5],[6])
# new instance where we do not know the answer
Xnew = array([[4, 5, 6]])
yhat = model.predict_classes(Xnew)
结果解码 X=[4, 5, 6], Predicted=[7]
解决方案
您正在寻找的是loss='sparse_categorical_crossentropy'
假设整数目标是类标签的函数。因此,如果您的模型有 7 个输出,并且您给定目标 2,sparse_categorical_crossentropy
则将 2 转换[0,0,1,0,0,0,0]
为目标并categorical_crossentropy
照常应用。
在这种情况下,您的输出层激活函数应该是softmax
并且输出的数量等于类的数量。最有可能像Dense(num_classes, activation='softmax')
如果您的整数类只是[4,5,6]
那么您需要将它们转移[0,1,2]
到满足条件max(Y_targets) < num_classes
。
推荐阅读
- html - 当我将数据插入第二个文本框时,所有插入第一个文本框的数据都会被清除
- asp.net-core-2.0 - RazorPages:模型没有通过页面模型在部分中实例化
- javascript - WKWebView 弹出窗口未显示
- sql - 如果没有找到选定的行,则返回一个值 Oracle
- javascript - 拖动 Slick JS 并更改内容
- android - Android 模拟器 - 无法截屏 - 不支持的协议:2
- python - 具有不同类型的python列表到数组
- python - 没有位置的标头响应
- sql - 如何在 Sql server 中设置链接服务器以包含其他 Sql Server 上的数据库
- ajax - Grails 3 推送通知