如何将“对象”的dtype更改为float32?

时间:2019-08-06 07:15:35

标签: python numpy tensorflow keras

我实际上是在尝试编写Keras模型。以我的观点,keras模型需要一个np.arrays列表作为x(或一个Numpy Array)。就我而言,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,则会收到相同的错误。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

问题没有改变类型。问题在于批处理样本的大小不相同,因此无法创建np阵列。您可以通过使用注释中提到的填充来解决此问题。看看keras pad_sequences What does Keras.io.preprocessing.sequence.pad_sequences do?

答案 1 :(得分:1)

如果train2中的条目大小都不相同,则需要填充它们。由于这是需要定期进行的工作,因此Keras为此提供了一个功能:pad_sequences

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

根据您的型号,以这种方式添加的额外数据可能不是问题。一种常见的处理方法是Masking。使用它来生成将自动向下传递到模型的蒙版,以便忽略某些值(您通过填充添加的值)。但是请注意,并非所有图层都支持遮罩,因此这也许不是您的选择。