使用Keras创建一个方形函数估计器

时间:2018-01-12 07:44:12

标签: python tensorflow neural-network keras

我对神经网络还很陌生。我尝试用Keras实现以下目标:

我有一组数据,其中 f(x)= x ^ 2 + 3 。像这样:

x       f(x)
 -10    103
-9.9    101.01
-9.8    99.04
-9.7    97.09
...
9.7     97.09
9.8     99.04
9.9    101.01
10     103

所以我尝试构建一个可以根据x预测值f(x)的模型。我认为这一定是一件简单的事情,但我无法找到任何暗示。我得到的输出范围从0到1(我猜是因为归一化?)而且它们似乎也是垃圾。

# Import the dataset
dataset = pd.read_csv("simple_network/Linear Data.csv", header=None).values
X_train, X_test, Y_train, Y_test = train_test_split(dataset[:,0:1], dataset[:,1], 
                                                    test_size=0.25,)
# Now we build the model
neural_network = Sequential() # create model
neural_network.add(Dense(5, input_dim=1, activation='sigmoid')) # hidden layer
neural_network.add(Dense(1, activation='sigmoid')) # output layer
neural_network.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
neural_network_fitted = neural_network.fit(X_train, Y_train, epochs=1000, verbose=0, 
                                           batch_size=X_train.shape[0], initial_epoch=0)

我怀疑我需要以某种方式满足预期间隔值作为输出而不是名义或序数值的事实。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

首先,使用sigmoid作为输出图层的激活功能。如果查看sigmoid函数的公式(请参阅wiki),您可以看到其输出值位于0.01.0的范围内。因此,尝试将最后一层的激活函数替换为linear。这样,非线性将由您的隐藏层处理(具有非线性激活功能),并且输出层将用于缩放并在需要时添加偏差。