使用keras预测二项式函数

时间:2018-12-31 01:29:11

标签: python tensorflow keras

我只是在python下探索keras。

我创建了一个常数训练数组,其中y = x * 2 + 1 (非常简单的二项式函数)

当我尝试预测24和40时,我会得到

array([[2429427.8],
       [2429427.8]], dtype=float32)

我希望得到

array([[49],
           [81]], dtype=float32)

或关闭。

这是怎么回事?

代码

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation
import numpy as np

X = np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]])
y = np.array([3,5,7,9,11,13,15,17,19,21])

model = Sequential()
model.add(Dense(units=200, input_dim=1))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))

model.compile(loss='mean_squared_error',
              optimizer='sgd')

model.fit(X, y, epochs=40, batch_size=50, verbose=1)

test=np.array([[24],[40]])
model.predict(test)

这个小脚本的最终目标是切换到具有两个功能的X数组

即。 ([1,3],[3,7],[5,11],[6,1]) 和y标签,即。 ([1],[1],[1],[0])

以便我可以使用该模型预测候选人(即[400,14])何时不适合二项式函数。

谢谢!

快乐机器

2 个答案:

答案 0 :(得分:0)

您可以使用以下熊猫来做到这一点:

import pandas as pd
X = pd.DataFrame([[1,3],[3,7],[5,11],[6,1]])
y = pd.DataFrame([1,1,1,0])

您还需要将input_dim设置为2,因为您正在使用每个示例的2个功能。最终的代码是:

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation
import pandas as pd
import numpy as np

X=pd.DataFrame([[1,3],[3,7],[5,11],[6,1]])
y=pd.DataFrame([1,1,1,0])

model = Sequential()
model.add(Dense(units=200, input_dim=2))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.add(Dense(1, activation='sigmoid'))


model.compile(loss='mean_squared_error',
              optimizer='sgd')

model.fit(X, y, epochs=40, batch_size=50, verbose=1)

test=np.array([[24,40]])
print model.predict(test)

同时,我认为您需要更多示例,并充分利用神经网络的节点/隐藏层数量。

答案 1 :(得分:0)

让我们谈谈您问题中的回归输出错误。您需要规范化输入数据。否则,您的模型将不会学到任何东西。

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation
import numpy as np

X = np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]])
y = np.array([3,5,7,9,11,13,15,17,19,21])
# normalize the input data
X_mean = X.mean()
X_std = X.std()
X = (X-X_mean)/X_std

model = Sequential()
model.add(Dense(units=200, input_dim=1))
model.add(Activation('relu'))
model.add(Dense(units=45))
model.add(Activation('relu'))
model.add(Dense(units=1))

model.compile(loss='mean_squared_error',
              optimizer='sgd')
model.fit(X, y, epochs=40, batch_size=50, verbose=1)

test=np.array([[24],[40]])
# normalize the input data
test = (test-X_mean)/X_std
result = model.predict(test)
print(result)

# print
Using TensorFlow backend.
Epoch 1/40
10/10 [==============================] - 1s 96ms/step - loss: 176.4364
...
...
[[50.623974]
 [84.23475 ]]