我是神经网络的新手,并且看着很多东西都是为了建造我的第一个,但有些事情是不对的。
输入包含100个输入,所有数字均在0到100之间。 输出有三个类[x,y,z],其中只有一个可以是1,其他的应该是0,所以只有3个结果 [1,0,0],[0,1,0]和[0,0,1]
我正在尝试以下设置
model = Sequential([
Dense(32, input_shape=(100,), activation='sigmoid'),
Dense(64, activation='sigmoid'),
Dense(3, activation='sigmoid')
])
model.compile(Adam(lr=0.0001),loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(bets, results, validation_split= 0.20, batch_size=10, epochs=200, shuffle=True, verbose=3)
我得到的问题是输出总数不是1,所以理想情况下我应该看看
例如[0.1,0.3,0.6]或[0.7,0.2,0.1]或[0.1,0.8,0.1]
但是当我进行预测时,我会得到像
这样的东西例如[0.8,0.2,0.9]
也许模型需要训练超过200个时期,但不确定我的其他配置是否适合我的输入和输出值。
任何想法?
答案 0 :(得分:2)
通常,如果您希望输出总和为1,则将softmax图层添加为神经网络中的最后一层,从而输出一种伪概率度量。
这应该有效:
model = Sequential([
Dense(32, input_shape=(100,), activation='sigmoid'),
Dense(64, activation='sigmoid'),
Dense(3, activation='softmax')
])
model.compile(Adam(lr=0.0001),loss='categorical_crossentropy', metrics = ['accuracy'])
model.fit(bets, results, validation_split= 0.20, batch_size=10, epochs=200, shuffle=True, verbose=3)
答案 1 :(得分:-1)
在正常情况下,神经网络永远不会给你一些可能性,这意味着P(a)
在两个结果的情况下不等于1-P(b)
。相反,它会在经过足够的训练后为您提供接近该值的近似值,具体取决于加权函数。
现在,看看你的代码,你可能用错误的逻辑训练我们的NN。 [0.8, 0.2, 0.9]
看起来像[1, 0 ,1]
,它与您期望的输出[0, 1 ,0]
互为补充。
打印所有输出以查看是否是这种情况,然后相应地采取行动以移动输出。
最后一件事:凭借您想要的输出,NN将为您提供类似[0.06, 0.93, 0.15]
的内容,其中两个接近0
,另一个接近1
。如果它们是,则值不应总和为1,那么你做错了。