【问题标题】:How to change the dtype of an "object" to float32?如何将“对象”的 dtype 更改为 float32?
【发布时间】:2019-12-13 16:42:05
【问题描述】:

我实际上是在尝试编写一个 Keras 模型。在我看来,keras 模型需要一个 np.arrays 列表作为 x (或 Numpy 数组)。在我的情况下,x 看起来像这样:

print(training.dtype)

对象

print(training.shape)

(406,)

print(training[0].dtype)

float64

print(training[0].shape)

(5140, 5)

这是我的训练数据 (x) 的大小。如果我想训练模型,我会收到此错误:

返回数组(a, dtype, copy=False, order=order)

ValueError: 使用序列设置数组元素。

这就是为什么我认为,我准备的数据错误。如果我想用 .astype 将它们转换为 float32,我会得到同样的错误。

感谢您的帮助!

【问题讨论】:

  • 检查用于制作train2的物品的长度或形状。看起来它们的大小不同。
  • 你试过train2 = np.array(train2)吗?它说什么?
  • @hpaulj 是的,它们的大小各不相同。这是我的模型的问题吗?
  • @sebrockm 是的,我之前做过几行。它编译没有错误。
  • @MareSeestern 是的,不同的尺寸是个问题。对你的模型来说不是那么多,而是对 numpy.您将需要截断大数组或向小数组添加填充。如果您将它们全部设为相同大小(例如(1140, 9)),那么np.array() 将生成一个大小为(907, 1140, 9) 的单个numpy 数组,这是model.fit() 所期望的。

标签: python numpy tensorflow keras


【解决方案1】:

如果train2 中的条目大小不同,则需要填充它们。由于这是需要定期完成的事情,Keras 为此提供了一个功能:pad_sequences

一旦它们的大小都相同,np.array(train2) 将创建一个可以传递给 model.fit() 的单个 numpy 数组。

根据您的模型,您以这种方式添加的额外数据可能会或可能不会成为问题。处理此问题的常用方法是Masking。使用它来生成一个掩码,该掩码将自动传递给模型,以便忽略某些值(您通过填充添加的值)。但是请注意,并非所有图层都支持遮罩,所以这可能不适合您。

【讨论】:

    【解决方案2】:

    问题不在于更改类型。问题在于批次样本的大小不同,因此无法创建 np 数组。您可以通过使用 cmets 中提到的填充来解决此问题。看看keraspad_sequencesWhat does Keras.io.preprocessing.sequence.pad_sequences do?

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 2013-01-06
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2023-01-17
      • 2019-11-08
      • 2020-10-22
      相关资源
      最近更新 更多