我想制作一个神经网络(使用keras, sklearn, tensorflow)来预测给定数据集(1维数组)的(n+1)值。例如,如果我有一个列表[2,3,12,1,5,3]作为输入,我想得到一个[2,3,12,1,5,3,x]作为输出。
以下是我的真实样本和预测:https://i.stack.imgur.com/ZwpjD.png我对这个结果并不满意,在一半的样本之后,我的预测几乎变成了常数函数。有没有人能帮我解释一下x的一半之后出现这种"持续异常"的原因是什么?
这可能是因为:
- 神经网络结构
- 列车样本数量少(50-80)
- 非常多样化的输入数据集
下面是我的设置:
def compile_model(self):
self.model.compile(
optimizer=keras.optimizers.Adam(), # Optimizer
loss=keras.losses.mean_squared_error,
)
def fit_model(self, verbose=0):
return self.model.fit(
self.train_x[:int(len(self.train_x) * 0.66)],
self.train_y[:int(len(self.train_x) * 0.66)],
epochs=900,
# steps_per_epoch=10,
batch_size=10,
verbose=verbose,
validation_data=(self.train_y[int(len(self.train_x) * 0.66):],
self.train_x[int(len(self.train_x) * 0.66):])
).history
结构:
def setup_model(self):
self.model.add(Dense(99, input_dim=1, activation='tanh', kernel_initializer='he_uniform'))
self.model.add(Dense(256, activation='tanh', kernel_initializer='he_uniform'))
self.model.add(Dense(90, activation='tanh', kernel_initializer='he_uniform'))
self.model.add(Dropout(0.2))
self.model.add(Dense(45, activation='tanh', kernel_initializer='he_uniform'))
self.model.add(Dense(20, activation='tanh', kernel_initializer='he_uniform'))
self.model.add(Dense(10, activation='tanh', kernel_initializer='he_uniform'))
self.model.add(Dense(1, activation='tanh', kernel_initializer='he_uniform'))
SOLVED:我使用简单的f(x)=y依赖关系进行预测,所以我的模型仅基于日期索引进行学习,例如f(0)=123,f(1)=124。我所做的就是把列表[2,3,12,1,5,3]分成几个部分:x=[2,3,12],y=1;x =[1] 3, 12日,y = 5;x =(12、1、5),y = 3;现在我的神经网络学习基于很少的样本,这让我用更少的样本得到了完美的结果,我的预测x如果我想知道列表的n+1值是x=[1,5,3],从这几天我可以得到更好的结果。