keras 如何使用Karas TensorFlow进行预测?

hrirmatl  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(152)

我编写了这个机器学习算法,但它返回给我一个wierd数组。我想输入2个数字,然后这些数字被分类成类似的结果在Y中找到,我如何使用这个模型进行预测?

import numpy as np # mutivariate clasification
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

X =np.array(
[[3, 7],
 [3, 6],
 [3, 7.2],
 [6, 8],
 [7, 7.5],
 [7.9, 7.5]])

Y =np.array([1, 1, 1, 2, 3, 3])

model = Sequential([
    Dense(units = 25, activation = "relu"),
    Dense(units = 15, activation = "relu"),
    Dense(units = 10, activation = "softmax"),])

from keras.losses import SparseCategoricalCrossentropy
model.compile(loss = SparseCategoricalCrossentropy())
model.fit(X, Y, epochs = 100)

我试了这个代码:

Xpred = [[3,7.8]]
prediction = model.predict(Xpred, verbose = 1)
print(prediction)

它返回:

[[3.4789115e-02 8.4235787e-01 7.6775238e-02 1.9370530e-02 1.0821970e-02
  4.8491983e-03 4.7121649e-03 7.4993627e-04 2.9366722e-04 5.2804169e-03]]

我是新的堆栈和ML,所以请让我知道我可以如何改进,或者如果你有任何阅读材料或ML的资源,你可以分享!

ux6nzvsh

ux6nzvsh1#

这里有很多东西需要理解,我建议你学习更多关于分类的教程,并严格遵循这些步骤(keras文档在这方面非常好),但是我会尝试告诉你足够多的东西来理解你所看到的,并让你的基本示例工作。
最后得到的浮点数数组是每个类的概率数组。有10个概率,因为您将输出图层中的单元数设置为10,而数据中只有3个类。我猜您只是想为新要素集获取分类([3, 7.8]),所以你取最高的概率,在这种情况下,你可以通过检查看到预测的类是1,因为最高的概率是8.4235787e-01,它在第一个位置,但是通常你可以用np.argmax在numpy数组上得到它。
使代码按预期方式工作的步骤:

  • 将输出图层中的单元数设置为类数(3)
  • 从0开始对类进行编号。一般来说,您可以使用整数编码来完成此任务(keras和其他ML库中有用于此操作的工具,请查看这些工具),但由于此处的数据非常小,因此我们可以手动完成此任务,将1替换为0,将2替换为1,将3替换为2。
  • np.argmax应用于从model.predict获得的数组,以获得预测类

代码最终看起来像这样:

import numpy as np # mutivariate clasification
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

X =np.array(
[[3, 7],
[3, 6],
[3, 7.2],
[6, 8],
[7, 7.5],
[7.9, 7.5]])

Y =np.array([0, 0, 0, 1, 2, 2])

model = Sequential([
    Dense(units = 25, activation = "relu"),
    Dense(units = 15, activation = "relu"),
    Dense(units = 3, activation = "softmax")
])

from keras.losses import SparseCategoricalCrossentropy
model.compile(loss = SparseCategoricalCrossentropy())
model.fit(X, Y, epochs = 100)

for prediction in model.predict([[3, 7.8]]):
    print(prediction)
    print(np.argmax(prediction))

输出的最后一部分是:

[0.916569   0.07700075 0.00643022]
0

因此,预测类为0(或根据您发布的原始数据为1),这是我们根据对训练数据和新数据的检查所预期的。

相关问题