python keras神经网络预测不工作(输出0或1)

python keras神经网络预测不工作(输出0或1),python,tensorflow,keras,Python,Tensorflow,Keras,我用keras创建了一个预测加法的神经网络。 我有2个输入,加上2个输入,得到1个输出结果 我用tensorflow训练我的神经网络,然后我尝试预测加法,但程序返回0或1值,而不是3,4,5,等等 这是我的代码: from keras.models import Sequential from keras.layers import Dense import numpy # fix random seed for reproducibility seed = 7 numpy.random.see

我用keras创建了一个预测加法的神经网络。 我有2个输入,加上2个输入,得到1个输出结果

我用tensorflow训练我的神经网络,然后我尝试预测加法,但程序返回0或1值,而不是3,4,5,等等

这是我的代码:

from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load dataset
dataset = numpy.loadtxt("data.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:2]
Y = dataset[:,2]
# create model
model = Sequential()
model.add(Dense(12, input_dim=2, init='uniform', activation='relu'))
model.add(Dense(2, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10,  verbose=2)



# calculate predictions
predictions = model.predict(X)
# round predictions
rounded = [round(x[0]) for x in predictions]
print(rounded)
和我的文件data.csv:

例如:

1+2=3
3+3=6
4+5=9
...etc.
但我得到的结果是:0,1,0,0,1,0,1。。。 为什么我没有得到输出为3,6,9

我更新了使用其他损失函数的代码,但我有相同的错误:

from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("data.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:2]
Y = dataset[:,2]
# create model
model = Sequential()
model.add(Dense(12, input_dim=2, init='uniform', activation='relu'))
model.add(Dense(2, init='uniform', activation='relu'))
#model.add(Dense(1, init='uniform', activation='sigmoid'))
model.add(Dense(1, input_dim=2, init='uniform', activation='linear'))

# Compile model
#model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10,  verbose=2)



# calculate predictions
predictions = model.predict(X)
# round predictions
rounded = [round(x[0]) for x in predictions]
print(rounded)
outout=1,1,1,3,1,1,…等

这是由于您在最后一层中的。根据定义:

它只能获取0到1之间的值。您应该更改最后一层的激活功能

您可以使用Dense8而不是Dense2来尝试此操作:

这是由于您在最后一层中的。根据定义:

它只能获取0到1之间的值。您应该更改最后一层的激活功能

您可以使用Dense8而不是Dense2来尝试此操作:


正如@ebeneditos所提到的,您需要将最后一层中的激活函数更改为sigmoid以外的函数。您可以尝试将其更改为线性

model.add(Dense(1, init='uniform', activation='linear'))
您还应该将损失函数更改为类似均方误差的函数,因为您的问题更像是一个回归问题,而不是一个分类问题。二进制交叉熵被用作二进制分类问题的损失函数

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

正如@ebeneditos所提到的,您需要将最后一层中的激活函数更改为sigmoid以外的函数。您可以尝试将其更改为线性

model.add(Dense(1, init='uniform', activation='linear'))
您还应该将损失函数更改为类似均方误差的函数,因为您的问题更像是一个回归问题,而不是一个分类问题。二进制交叉熵被用作二进制分类问题的损失函数

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

谢谢你的帮助,我用你的损失函数更新了我的代码,但是我有同样的问题,outout=1,1,1,3,1,1,…等等。谢谢你的帮助,我用你的损失函数更新了我的代码,但是我有同样的问题,outout=1,1,1,3,1,1,…等等。你为什么评论Dense12和Dense2层?这只是为了测试。我忘了取消对它们的注释。请尝试Dense8而不是Dense2或其他体系结构。请参阅编辑后的答案。为什么要注释Dense12和Dense2层?这只是为了测试。我忘记取消注释了。请尝试使用Dense8而不是Dense2或其他体系结构。请参阅编辑后的答案。感谢您的帮助,我尝试更改这些值,我刚刚尝试了您的解决方案,但仍然存在相同的问题。您可以从这里获得一些想法:谢谢您的帮助,我试图改变这些价值观,我只是尝试了你的解决方案,但我仍然有同样的问题,你可以从这里得到一些想法,也许: