如何优化我的神经网络?

时间:2018-05-16 22:55:33

标签: python neural-network keras

我是神经网络的新手,并且看着很多东西都是为了建造我的第一个,但有些事情是不对的。

输入包含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个时期,但不确定我的其他配置是否适合我的输入和输出值。

任何想法?

2 个答案:

答案 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,那么你做错了。