Tensorflow 数据集 API:顺序需要 1 个输入,但它收到 2 个输入张量
Tensoflow Dataset API: sequential expects 1 input but it received 2 input tensors
我使用的是 TF 2.6.2 版。使用 Dataset API
我有一本包含标签列表和编码列表的字典。
使用以下方法创建了一个 TF 数据集:
ds = tf.data.Dataset.from_tensor_slices(dictionary)
为了进行一些自定义批处理,我使用了这行代码:
ds = ds.group_by_window(key_func=lambda elem: tf.cast(elem['label'], tf.int64)%20, reduce_func=lambda _, window: window.batch(batch_size), window_size=batch_size)
本质上,它根据标签列上的取模规则进行批处理。
接下来我创建一个非常简单的模型来吃掉长度为 30 的编码:
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(30,)))
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(8, activation='relu'))
使用 TripletSemiHardLoss 编译:
model.compile(
optimizer=tf.keras.optimizers.Adam(0.001),
loss=tfa.losses.TripletSemiHardLoss(y_true = "label", y_pred = "encodings"))
适合:
history = model.fit(
ds,
epochs=5)
这给了我错误:
ValueError: Layer sequential_7 expects 1 input(s), but it received 2 input tensors. Inputs received: [<tf.Tensor 'ExpandDims:0' shape=(None, 1) dtype=int32>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 30) dtype=float64>]
知道如何解决这个问题吗?该模型似乎不知道区分数据集的标签和编码部分。
也许在 ds
中切换 x
和 y
位置:
ds = ds.map(lambda x: (x['positives'], x['id_col']))
history = model.fit(
ds,
epochs=5)
或者根据您的数据结构,也许:
ds = ds.map(lambda x: (x[1], x[0]))
history = model.fit(
ds,
epochs=5)
我使用的是 TF 2.6.2 版。使用 Dataset API
我有一本包含标签列表和编码列表的字典。
使用以下方法创建了一个 TF 数据集:
ds = tf.data.Dataset.from_tensor_slices(dictionary)
为了进行一些自定义批处理,我使用了这行代码:
ds = ds.group_by_window(key_func=lambda elem: tf.cast(elem['label'], tf.int64)%20, reduce_func=lambda _, window: window.batch(batch_size), window_size=batch_size)
本质上,它根据标签列上的取模规则进行批处理。
接下来我创建一个非常简单的模型来吃掉长度为 30 的编码:
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(30,)))
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(8, activation='relu'))
使用 TripletSemiHardLoss 编译:
model.compile(
optimizer=tf.keras.optimizers.Adam(0.001),
loss=tfa.losses.TripletSemiHardLoss(y_true = "label", y_pred = "encodings"))
适合:
history = model.fit(
ds,
epochs=5)
这给了我错误:
ValueError: Layer sequential_7 expects 1 input(s), but it received 2 input tensors. Inputs received: [<tf.Tensor 'ExpandDims:0' shape=(None, 1) dtype=int32>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 30) dtype=float64>]
知道如何解决这个问题吗?该模型似乎不知道区分数据集的标签和编码部分。
也许在 ds
中切换 x
和 y
位置:
ds = ds.map(lambda x: (x['positives'], x['id_col']))
history = model.fit(
ds,
epochs=5)
或者根据您的数据结构,也许:
ds = ds.map(lambda x: (x[1], x[0]))
history = model.fit(
ds,
epochs=5)