我编写了这个机器学习算法,但它返回给我一个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的资源,你可以分享!
1条答案
按热度按时间ux6nzvsh1#
这里有很多东西需要理解,我建议你学习更多关于分类的教程,并严格遵循这些步骤(keras文档在这方面非常好),但是我会尝试告诉你足够多的东西来理解你所看到的,并让你的基本示例工作。
最后得到的浮点数数组是每个类的概率数组。有10个概率,因为您将输出图层中的单元数设置为10,而数据中只有3个类。我猜您只是想为新要素集获取分类(
[3, 7.8]
),所以你取最高的概率,在这种情况下,你可以通过检查看到预测的类是1
,因为最高的概率是8.4235787e-01
,它在第一个位置,但是通常你可以用np.argmax
在numpy数组上得到它。使代码按预期方式工作的步骤:
np.argmax
应用于从model.predict
获得的数组,以获得预测类代码最终看起来像这样:
输出的最后一部分是:
因此,预测类为0(或根据您发布的原始数据为1),这是我们根据对训练数据和新数据的检查所预期的。