【发布时间】:2020-03-26 12:39:58
【问题描述】:
我试图让一个非常(过度)简化的 Keras 二元分类器神经网络运行但没有成功。损失只是保持不变。到目前为止,我已经使用过优化器(SGD、Adam、RMSProp)、学习率、权重初始化、批量大小和输入数据标准化。
什么都没有改变。我在做一些根本错误的事情吗?代码如下:
from tensorflow import keras
from keras import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
data = np.array(
[
[100,35,35,12,0],
[101,46,35,21,0],
[130,56,46,3412,1],
[131,58,48,3542,1]
]
)
x = data[:,1:-1]
y_target = data[:,-1]
x = x / np.linalg.norm(x)
model = Sequential()
model.add(Dense(3, input_shape=(3,), activation='softmax', kernel_initializer='lecun_normal',
bias_initializer='lecun_normal'))
model.add(Dense(1, activation='softmax', kernel_initializer='lecun_normal',
bias_initializer='lecun_normal'))
model.compile(optimizer=SGD(learning_rate=0.1),
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(x, y_target, batch_size=2, epochs=10,
verbose=1)
【问题讨论】:
-
Softmax 的定义是:所有神经元之和为 1。当你有 1 个神经元时会发生什么?是的,它总是 1
-
使用
"sigmoid" -
为什么是
x = data[:,1:-1]而不是x = data[:,:-1]? -
还有,中间层,
model.add(Dense(3, input_shape=(3,), activation='softmax',, kernel_initializer='lecun_normal', bias_initializer='lecun_normal'))你为什么把这个设置为SoftMax?中间有SoftMax是很奇怪的。你试过relu或sigmoid等吗? -
嘿,谢谢大家!我混淆了 softmax 和 sigmoid ......也许是深夜工作......它现在已经修复并且就像一个魅力!将在下面更新我的答案以供参考
标签: python tensorflow keras classification