【问题标题】:Tensorflow dataset from numpy array来自numpy数组的Tensorflow数据集
【发布时间】:2021-01-14 10:05:40
【问题描述】:

我有两个要转换为张量流数据集的 numpy 数组 (X, Y)。 According to the documentation应该可以运行了

train_dataset = tf.data.Dataset.from_tensor_slices((X, Y))
model.fit(train_dataset)

但是,当我这样做时,我得到了错误: ValueError: Shapes (15, 1) and (768, 15) are incompatible

如果 numpy 数组的形状与预期的输入/输出不兼容,这将是有意义的。 但是,如果我使用 model.fit(X,Y) 使用 numpy 数组运行它,它运行没有任何问题,所以形状似乎没问题。

在下一步中,我检查了输出大小:

>>> train_dataset.batch(4)
<BatchDataset shapes: ((None, 768), (None, 15)), types: (tf.int64, tf.uint8)>

神经网络的输入层期望 (None, None) 和输出 (None, 15)。所以这似乎也匹配。

我的数据集相当大,因此很难分享,但这里有一个可重现的最小示例,它显示了这个问题。这是同样的错误,仅使用 numpy 数组即可。

import tensorflow as tf
from tensorflow.keras.layers import *
from tensorflow.keras import Model
import numpy as np

a = np.random.randint(10,size=(10,20,1))
b = np.random.rand(10,15)
train_dataset = tf.data.Dataset.from_tensor_slices((a,b))

inp = Input(shape=(None,), dtype="int32")
embedding = Embedding(12, 300, trainable=False, mask_zero=True)(inp)
gru = Bidirectional(GRU(128, recurrent_dropout=0.5))(embedding)
out = Dense(64, activation=tf.nn.relu)(gru)
out = Dropout(0.5)(out)
out = Dense(15, activation='sigmoid')(out)
m = Model(inputs=inp, outputs = out)
m.compile("adam", 'categorical_crossentropy')

m.fit(a,b)
m.fit(train_dataset)

有人可以指出如何解决这个问题的正确方向吗?

Tensorflow 版本为 2.3.1。

【问题讨论】:

    标签: python numpy tensorflow keras


    【解决方案1】:

    如果您对数据集进行批处理,它将起作用:

    train_dataset = tf.data.Dataset.from_tensor_slices((a,b)).batch(4)
    

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2016-03-25
      • 2018-07-22
      • 1970-01-01
      • 2022-06-13
      • 2020-08-18
      • 2021-03-10
      • 2016-11-13
      • 2022-10-06
      相关资源
      最近更新 更多