Python 从数据集中训练单词嵌入时不提供梯度
我正在尝试从TF2数据集中训练自定义单词嵌入。我的文本已经被编码为整数,我的模型在示例数据集(即从中加载的数据集)上运行良好。但是,当我从(批处理的)数据集中输入张量时,模型无法开始使用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
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))
你能提供有效的代码吗?不,我在想办法。你能提供有效的代码吗?不,我在想办法。