【发布时间】: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