我做了一个简单的NN,用输入层中的两个二进制值来决定XNOR值。 我有所有可能与标签组合的Numpy数组。你知道吗
代码:
from keras.models import Sequential
from keras.layers import Dense
import numpy
data = numpy.array([[0.,0.,1.],[0.,1.,0.],[1.,0.,0.],[1.,1.,1.]])
train = data[:,:-1] # Taking The same and All data for training
test = data[:,:-1]
train_l = data[:,-1]
test_l = data[:,-1]
train_label = []
test_label = []
for i in train_l:
train_label.append([i])
for i in test_l:
test_label.append([i]) # Just made Labels Single element...
train_label = numpy.array(train_label)
test_label = numpy.array(test_label) # Numpy Conversion
model = Sequential()
model.add(Dense(2,input_dim = 2,activation = 'relu'))
model.add(Dense(2,activation = 'relu'))
model.add(Dense(1,activation = 'relu'))
model.compile(loss = "binary_crossentropy" , metrics = ['accuracy'], optimizer = 'adam')
model.fit(train,train_label, epochs = 10, verbose=2)
model.predict_classes(test)
即使使用相同的数据集进行训练和测试。。。它不能正确预测。。。 我哪里错了?你知道吗
我故意使用整个数据集,因为它不是用2个值进行预测。。。你知道吗
你的架构对于这个功能来说太简单了。如果您使用下面的体系结构并训练100个时代,您将获得精度=1。你知道吗
升级: 为什么一个简单的模型不能很好地工作?
其中一个原因是,如果一个神经元在每个数据点上都变为负,那么它的梯度就变为零,它的权值就不再训练了。你一开始只有很少的神经元,如果其中一些神经元以这种方式“死亡”,那么剩下的神经元可能不足以接近这个功能。你知道吗
另一个问题是,更少的神经元使得模型更容易陷入局部极小值。你知道吗
然而,理论上你是对的,仅仅几个神经元就足够了。 下面的模型即使只有一层也能工作。我已经用LeakyReLU替换了ReLU来解决第一个问题。它大部分时间都有效,但有时会陷入局部极小值。你知道吗
相关问题 更多 >
编程相关推荐