使用python

时间:2017-08-02 01:26:11

标签: python algorithm neural-network keras

我是神经网络的初学者,试图用python中的5个输入来预测温度值(输出)的值。我在python中使用 keras包来处理神经网络。

另外,我使用前馈神经网络(回归)和递归神经网络(LSTM)两种算法来预测值。但是,这两种算法都不适合预测。

在我的前馈神经网络(回归)的情况下,我使用了3个隐藏层(100,200,300个神经元),如下面的代码,

def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(100, input_dim=5, kernel_initializer='normal', activation='sigmoid'))
    model.add(Dense(200, kernel_initializer = 'normal', activation='sigmoid'))
    model.add(Dense(300, kernel_initializer = 'normal', activation='sigmoid'))
    model.add(Dense(1, kernel_initializer='normal'))
    # Compile model
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model


df = DataFrame({'Time': TIME_list, 'input1': input1_list, 'input2': input2_list, 'input3': input3_list, 'input4': input4_list, 'input5': input5_list, 'output': output_list})
df.index = pd.to_datetime(df.Time)
df = df.values

#Setting training data and test data
train_size_x = int(len(df)*0.8)     #The user can change the range of training data
print(train_size_x)
X_train = df[0:train_size_x, 0:5]
t_train = df[0:train_size_x, 6]
X_test = df[train_size_x:int(len(df)), 0:5]
t_test = df[train_size_x:int(len(df)), 6]

# fix random seed for reproducibility
seed = 7
np.random.seed(seed)

scale = StandardScaler()
X_train = scale.fit_transform(X_train)
X_test = scale.transform(X_test)

#Regression in Keras package
clf = KerasRegressor(build_fn=baseline_model, nb_epoch=50, batch_size=5, verbose=0)

clf.fit(X_train,t_train)
res = clf.predict(X_test)

但是,错误很大。最大绝对误差为78.4834。所以我试图通过改变隐藏层中隐藏层或神经元的数量来最小化该错误,但错误保持不变。

在前馈NN之后,其次,我使用了回归神经网络(LSTM)算法,该算法只能使用一个输入进行预测。就我而言,输入是温度。它给我的误差比前馈NN少得多,但我深深地想到我实施的递归神经网络(LSTM)在我的情况下有点模棱两可,因为它没有使用影响输出(温度值)的5个输入作为我在上面实现的前馈回归。

现在我迷失了我应该使用的其他算法。

我案子的任何建议或想法......?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我必须同意你的问题的评论者,你比你自己跳得更远。神经网络有时看起来像黑魔法,值得花些时间去了解真正在幕后发生的事情。 sklearn是一个开始学习和实验的好地方。 Sklearn是一个很好的起点,因为您可以轻松地尝试不同的技术,这将帮助您快速学习如何构建您的问题。还有大量的信息和教程。

从那里开始,您将能够更好地从头开始处理自己的NN。此外,sklearn还有许多有用的功能来预处理/标准化您的训练数据,这本身就是一门艺术。

有许多良好的网络已经可用于常见情况。大部分工作是为您的问题选择正确的结构,获得良好的数据以进行训练,并按摩该数据以便正确使用。

检查出来...... http://scikit-learn.org/stable/