【问题标题】:How to loop through Keras fit function?如何循环通过 Keras 拟合函数?
【发布时间】:2018-10-26 18:19:24
【问题描述】:

为了避免写 500 次:

model.fit(
      x[i],
      y[i],
      batch_size=batch,
      epochs=epochs,
      validation_split=0.05)

我想通过我正在拟合的数据集数量循环这个。但是,当我这样做时,第一次拟合的指标如下:

loss: nan - acc: 7.4635e-04 - val_loss: nan - val_acc: 0.0000e+00

之后的每一次运行,其指标都是:

loss: nan - acc: 0.0000e+00 - val_loss: nan - val_acc: 0.0000e+00

现在我不认为 val_lossval_acc 为 0 并且 nan 很好,但至少有 acc 但在第一次拟合之后,所有指标基本上都为空。

编辑:

这是我格式化数据的代码。 x[i] 是所有数据,其中x[0] 将是第一个完整数据集。

    x_train = [None] * len(os.listdir('/'))
    y_train = [None] * len(os.listdir('/'))
    x_test = [None] * len(os.listdir('/'))
    y_test = [None] * len(os.listdir('/'))


def format_data(data, seq_len, normalise_window):
    sequence_length = seq_len + 1
    result = []
    for index in range(len(data) - sequence_length):
        result.append(data[index: index + sequence_length])

    if normalise_window:
        result = normalise_windows(result)

    result = np.array(result)


    row = round(0.85 * result.shape[0])
    train = result[:int(row), :]
    np.random.shuffle(train)
    x_train = train[:, :-1]
    y_train = train[:, -1]
    x_test = result[int(row):, :-1]
    y_test = result[int(row):, -1]

    x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
    x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))

    return [x_train, y_train, x_test, y_test]

for i, filename in enumerate(os.listdir('/directory')):
        try:
          print"starting file :",filename
          data = pd.read_csv('directory/{0}'.format(filename), index_col=0, header=0)
          data['open'].replace('nan',np.nan)
          data.dropna()
          new = data['open'].tolist()


          x_train[i], y_train[i], x_test[i], y_test[i] = format_data(new, seq_len, True)
        except:
          pass

for i in range(len(x_train)):
        print"starting fit :",i,"of length",len(x_train)

        try:
          model.fit(
            x_train[i],
            y_train[i],
            batch_size=batch,
            epochs=epochs,
            validation_split=0.05)
        except:
          pass

我怎样才能实现我想要做的事情?

【问题讨论】:

  • 你为什么要循环 over fit 函数? x的类型是什么?
  • nan 损失可能发生在很多事情上,包括您的数据、模型、激活、目标数据以及您的预处理方式。如果您恰好适合x[0]y[0],是否会发生这种情况?
  • @ZiyadEdher x 是一个顺序数据集。我想循环它,所以我不必复制和粘贴 500 个 fit 函数。
  • @nuric 第一次 (x[0]) 它给了我这些指标; loss: nan - acc: 7.4635e-04 - val_loss: nan - val_acc: 0.0000e+00 如操作中所述
  • x[0] 代表什么?第一个数据点还是数据点列表?

标签: python tensorflow machine-learning keras models


【解决方案1】:

尝试删除 for 块并尝试插入此代码

model.fit(
        x_train,
        y_train,
        batch_size=batch,
        epochs=epochs,
        validation_split=0.05)

我希望这可以帮助你。 我猜 loss 和 val_loss 是“nan”,因为你将单个值传递给模型,尝试传递张量本身(希望你会在 loss n val_loss 中获得一些值)。

【讨论】:

  • 所以我在 OP 中添加了很多代码,x[i] 不是一个单一的值,它应该是(至少以我目前的理解)一整套数据。我的代码中的第一个 for 循环显示了我如何使用数据填充 x。当我删除 try: except: 它仍然有同样的问题。
  • 我无法识别出你的数据,因为它不存在于我身边,并且 keras 以张量的形式获取整个数据。因为 y[] 已经完成了 OHE(一种热编码)
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2011-09-16
  • 2020-05-12
  • 1970-01-01
相关资源
最近更新 更多