简单非线性回归的Keras预测

时间:2020-11-10 09:04:19

标签: python keras

这让我发疯。我想使用Keras预测压力传感器的g值。我创建了此代码以根据我测量的电压输出来预测值。准确度非常低,据我了解,这是由于数据样本太少所致。因此,预测输出质量相当低,目前还可以。
我不知道的结果:我尝试预测一个值,结果完全不正确,即当我输入3.4时,结果约为10,而应为1000左右。如果输入数组 X_new 中包含更多值,结果质量将大大提高(已经有两个值)。我在这里想念什么?任何输入将不胜感激。
这是我的代码

import numpy as np
from sklearn import preprocessing, model_selection
from matplotlib import pyplot
from keras.layers import Dense, Activation, LSTM
from keras.models import Sequential, load_model

X = np.array([0.9,  1.75,   2.25,   2.45,   2.7,    2.9,    3.08,   3.2,    3.32,   3.4,    3.45])
y = np.array([10,   100,    200,    300,    400,    500,    600,    700,    800,    900,    1000])

X_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
y_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
X_scaled = (X_scaler.fit_transform(X.reshape(-1, 1)))
y_scaled = (y_scaler.fit_transform(y.reshape(-1, 1)))

X_train, X_test, y_train, y_test = model_selection.train_test_split(X_scaled, y_scaled, test_size=0.4, random_state=3)

model = Sequential()

model.add(Dense(128, input_shape=(1,), activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(1))

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

np.random.seed(3)
model.fit(X_train, y_train, epochs=256, batch_size=2, verbose=2)
_, accuracy = model.evaluate(X_train, y_train)
print('Accuracy: %.2f' % (accuracy*100))

model.save("workload_model/model.h5")

predicted = model.predict(X_test)
pyplot.plot(y_scaler.inverse_transform(y_train), color="red")
pyplot.plot(y_scaler.inverse_transform(predicted), color="blue")
pyplot.plot(y_scaler.inverse_transform(y_test), color="green")

print("X=%s\nPredicted=%s" % (X_scaler.inverse_transform(X_test), y_scaler.inverse_transform(predicted)))

# Test with new value
loaded_model = load_model("workload_model/model.h5")

X_new = np.array([3.4])

X_scaled = (X_scaler.fit_transform(X_new.reshape(-1, 1)))

predicted = loaded_model.predict(X_scaled)
print("X=%s\nPredicted=%s" % (X_scaler.inverse_transform(X_scaled), y_scaler.inverse_transform(predicted)))

pyplot.show()

1 个答案:

答案 0 :(得分:1)

X_new = np.array([3.4])

X_scaled = (X_scaler.fit_transform(X_new.reshape(-1, 1)))

predicted = loaded_model.predict(X_scaled)

这行应该是

X_scaled = (X_scaler.transform(X_new.reshape(-1, 1)))

您正在更改缩放器,这就是为什么它在处理更多数据时效果更好的原因

相关问题