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

标签 python tensorflow keras

我用 keras 创建了一个用于预测加法的神经网络。 我有 2 个输入和 1 个输出(添加 2 个输入的结果)。

我用 tensorflow 训练我的神经网络,然后我尝试预测加法,但程序返回 01 值而不是 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
10,8,18
1,3,4
5,3,8

例如:

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,...等

最佳答案

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

model.add(Dense(1, init='uniform', activation='linear'))

您还应该将损失函数更改为均方误差之类的东西,因为您的问题更多的是回归问题而不是分类问题(binary_crossentropy 用作二元分类问题的损失函数)

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

关于python keras 神经网络预测不起作用(输出 0 或 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779836/

相关文章:

ios - 在 CoreML 中为循环网络定义可选输入

python - 如何使用未知数组维度进行 numpy 组合切片和数组索引

python - 我如何在 python 中使用 pcov 来获取每个参数的错误?

machine-learning - 将卷积层和 LSTM 层与可变长度序列相结合

python - 使用 Functional API 和 tf.GradientTape() 的组合在 Tensorflow 2.0 中训练时如何将模型图记录到张量板?

python - 使用tf.nn.dynamic_rnn制作多个隐藏层的LSTM RNN

python - Keras,为什么向模型添加层这么慢?

python - 如何从 numpy float32 数组创建图像?

python - 从具有多个数据集的散点图中获取 x,y?

python - Google 的 TensorFlow 中的 Theano Dimshuffle 等效?