keras模型中一半数据集后的低结果



我想制作一个神经网络(使用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],从这几天我可以得到更好的结果。

相关内容

  • 没有找到相关文章

最新更新