Python 从数据集中训练单词嵌入时不提供梯度

Python 从数据集中训练单词嵌入时不提供梯度,python,python-3.x,tensorflow,keras,tensorflow-datasets,Python,Python 3.x,Tensorflow,Keras,Tensorflow Datasets,我正在尝试从TF2数据集中训练自定义单词嵌入。我的文本已经被编码为整数,我的模型在示例数据集(即从中加载的数据集)上运行良好。但是,当我从(批处理的)数据集中输入张量时,模型无法开始使用ValueError进行训练:没有为任何变量提供梯度:[“嵌入/嵌入:0”,“relu/kernel:0”,“relu/bias:0”,“out/kernel:0”,“out/bias:0”。 我不明白为什么会这样。导致相同错误的类似代码示例: import tensorflow as tf from tenso

我正在尝试从TF2数据集中训练自定义单词嵌入。我的文本已经被编码为整数,我的模型在示例数据集(即从中加载的数据集)上运行良好。但是,当我从(批处理的)数据集中输入张量时,模型无法开始使用
ValueError进行训练:没有为任何变量提供梯度:[“嵌入/嵌入:0”,“relu/kernel:0”,“relu/bias:0”,“out/kernel:0”,“out/bias:0”。

我不明白为什么会这样。导致相同错误的类似代码示例:

import tensorflow as tf
from tensorflow import keras 
from tensorflow.keras import layers

# build example dataset
tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
dataset = tf.data.Dataset.from_tensor_slices(tensor)

model = keras.Sequential([
  layers.Embedding(100, 18, name='embed'),
  layers.GlobalAveragePooling1D(),
  layers.Dense(16, activation='relu', name='relu'),
  layers.Dense(1, name='out')
], name="embedder")

model.summary() # shows 2,121 trainable params
model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=['accuracy'])

model.fit( # breaks here
    dataset,
    epochs=10,
    validation_data=dataset)

tf.keras.Sequential.fit的
x
参数表示(,由于使用了一个数据集,因此我用粗体显示了似乎相关的部分):

输入数据。它可以是:

  • Numpy数组(或类似数组)或数组列表(如果模型有多个输入)
  • 张量流张量或张量列表(如果模型有多个输入)
  • A
    dict
    将输入名称映射到相应的数组/张量(如果模型已命名输入)
  • A
    tf.data数据集
    应返回(输入、目标)或(输入、目标、样本权重)的元组。
  • 生成器或
    keras.utils.Sequence
    返回(输入,目标)或(输入,目标,样本权重)。下面给出了迭代器类型(数据集、生成器、序列)解包行为的更详细描述
但是,数据集似乎已设置为只生成单个张量(而不是张量的元组):

tensor=tf.常数([[1,2,3],[4,5,6],[7,8,9])
dataset=tf.data.dataset.from_tensor_切片(张量)
打印(数据集元素规格)
>>>TensorSpec(形状=(3,),数据类型=tf.int32,名称=无)
目标列表构建数据集应为模型提供所需:

tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
dataset = tf.data.Dataset.from_tensor_slices((
  tensor,
  [[0.0], [1.0], [1.0]]  # Arbitrary targets.
))
print(dataset.element_spec)
>>> (TensorSpec(shape=(3, 1), dtype=tf.int32, name=None), TensorSpec(shape=(1,), dtype=tf.float32, name=None))

tf.keras.Sequential.fit的
x
参数表示(,由于使用了一个数据集,因此我用粗体显示了似乎相关的部分):

输入数据。它可以是:

  • Numpy数组(或类似数组)或数组列表(如果模型有多个输入)
  • 张量流张量或张量列表(如果模型有多个输入)
  • A
    dict
    将输入名称映射到相应的数组/张量(如果模型已命名输入)
  • A
    tf.data数据集
    应返回(输入、目标)或(输入、目标、样本权重)的元组。
  • 生成器或
    keras.utils.Sequence
    返回(输入,目标)或(输入,目标,样本权重)。下面给出了迭代器类型(数据集、生成器、序列)解包行为的更详细描述
但是,数据集似乎已设置为只生成单个张量(而不是张量的元组):

tensor=tf.常数([[1,2,3],[4,5,6],[7,8,9])
dataset=tf.data.dataset.from_tensor_切片(张量)
打印(数据集元素规格)
>>>TensorSpec(形状=(3,),数据类型=tf.int32,名称=无)
目标列表构建数据集应为模型提供所需:

tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
dataset = tf.data.Dataset.from_tensor_slices((
  tensor,
  [[0.0], [1.0], [1.0]]  # Arbitrary targets.
))
print(dataset.element_spec)
>>> (TensorSpec(shape=(3, 1), dtype=tf.int32, name=None), TensorSpec(shape=(1,), dtype=tf.float32, name=None))

你能提供有效的代码吗?不,我在想办法。你能提供有效的代码吗?不,我在想办法。