我只是在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])何时不适合二项式函数。
谢谢!
快乐机器
答案 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 ]]