【发布时间】:2021-08-04 13:04:18
【问题描述】:
当我提供 新 原始数据时,我正尝试从我训练的模型中打印每个类别结果的预测概率。这是一个多类分类问题,有 8 个输出和 21 个输入。
当我展示新数据时,我可以打印 1 个结果,例如:
"Example 0 prediction: 1 (15.0%)"
相反,我希望看到类似于下面的内容。其中显示了每个类(0、1、2、3、4、6、Wide、Out)的概率:
Example 0 prediction 0: (12.5%), prediction 1: (12.5%), prediction 2: (12.5%), prediction 3: (12.5%), prediction 4: (12.5%), prediction 6: (12.5%), prediction Wide: (12.5%), prediction Out: (12.5%)
请注意,我已尝试搜索类似问题,包括 here、here 和 here,并查阅了 TensorFlow 文档。但是,这些主要讨论模型本身的更改,例如在最后一层激活softmax,将分类交叉熵作为损失函数等,从而生成概率。
我已经包含了模型架构以及预测代码以实现完全可见性。
型号:
earlystopping = callbacks.EarlyStopping(monitor ="val_loss",
mode ="min", patience = 125,
restore_best_weights = True)
#define Keras
model = Sequential()
model.add(Dense(50, input_dim=21))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5,input_shape=(50,)))
model.add(Dense(50))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5,input_shape=(50,)))
model.add(Dense(8, activation='softmax'))
#compile the keras model
model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])
model.fit(X, dummy_y, validation_split=0.25, epochs=1000, batch_size=100, verbose=1, callbacks=[earlystopping])
_, accuracy3 = model.evaluate(X, dummy_y, verbose=0)
print('Accuracy: %.2f' % (accuracy3*100))
做出预测:
class_names = ['0', '1', '2','3','4','6','Wide','Out']
predict_dataset = tf.convert_to_tensor([
[1,5,1,0.459,0.322,0.041,0.002,0.103,0.032,0.041,14,0.404,0.284,0.052,0.008,0.128,0.044,0.037,0.043,54,0,],
[1,18,5,0.512,0.286,0,0,0.083,0.024,0.095,13,0.24,0.44,0.08,0,0.08,0.08,0,0.08,173,3],
[2,11,13,0.5,0.417,0,0,0.083,0,0.083,82,0.35,0.36,0.042,0.003,0.135,0.039,0.051,0.02,51,7]
])
predictions = model(predict_dataset, training=False)
for i, logits in enumerate(predictions):
class_idx = tf.argmax(logits).numpy()
p = tf.nn.softmax(logits)[class_idx]
name = class_names[class_idx]
print("Example {} prediction: {} ({:4.1f}%)".format(i, name,100*p))
输出:
Example 0 prediction: 1 (15.0%)
Example 1 prediction: 1 (16.0%)
Example 2 prediction: 0 (16.9%)
我已经尝试对使用 TensorFlow 的 logits 的 for 循环进行更改,但我仍然无法让它打印每个结果和相关的概率。
非常感谢任何指导。
【问题讨论】:
标签: tensorflow machine-learning keras