具有categorical_crossentropy损失的多类预测

时间:2019-01-23 18:16:06

标签: python-3.x keras

假设这个示例实现了简单的二进制分类。

  

X = array([[1,2,3],[2,3,4],[3,4,5]])

     

y = array([0],[1],[0])

Dates[IncludeDate] is 1

这实现了多类分类。

  

X = array([[1,2,3],[2,3,4],[3,4,5]])

     

y = array([4],[5],[6])

...
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 = array([[1,2,3],[2,3,4],[3,4,5]])

     

y = array([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 = [4,5,6],Predicted = [7]

1 个答案:

答案 0 :(得分:0)

您要寻找的是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