我有一个值列表,范围从 15000
到 25000
。我必须将它们分为两类,这样(大约)20000 将最终归入第 1 类,其余归入第 2 类。我发现 sigmoid 激活应该适用于此。为此,我在 keras 中使用了以下层:
模型=顺序()
model.add(Dense(1 , input_dim =1 ))
model.add(Activation('sigmoid'))
model.add(Dense(2 , init='normal' , activation = 'softmax'))
model.compile(loss='mean_absolute_error', optimizer='rmsprop')
model.fit(X_train, y_train, validation_data=(X_test, y_test),epochs=10,batch_size=200,verbose=2)
但是,当我为示例案例运行模型时,所有值最终都属于类别 2。我该如何改进它?
最佳答案
如果您有一个介于 15000 和 25000 之间的值列表,那么 sigmoid 将为您提供接近 1.0 的所有这些值。 sigmoid 将所有东西压缩到 0 和 1 之间,因此像这样的非常大的值将逐渐接近 1。快速而肮脏的测试表明:
>>> import math
>>> def s(x):
... return 1.0/(1.0+math.exp(-x))
...
>>> s(15000)
1.0
>>> s(25000)
1.0
要么对值进行归一化(这应该不难,因为您知道范围),要么使用不同的激活函数。
当您提到其中 20000 个将归入一个类别而其余的归入另一个类别时,问题有点模棱两可,所以如果您的意思是您有 15000 到 25000 个值(不是指值的值)那些需要分类的,那没关系
关于python - Keras 中的 S 形层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45442843/