【发布时间】:2023-04-08 23:00:01
【问题描述】:
我试图通过设置参数矩阵来隔离一些用户特定的参数,其中每个数组都会学习特定于该用户的参数。
我想使用用户 ID 索引矩阵,并将参数连接到其他特征。
最后,有一些全连接层以获得理想的结果。
但是,我一直在代码的最后一行收到此错误。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-93de3591ccf0> in <module>
20 # combined = tf.keras.layers.Concatenate(axis=-1)([le_param, le])
21
---> 22 net = tf.keras.layers.Dense(128)(combined)
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs)
793 # framework.
794 if build_graph and base_layer_utils.needs_keras_history(inputs):
--> 795 base_layer_utils.create_keras_history(inputs)
796
797 # Clear eager losses on top level model call.
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer_utils.py in create_keras_history(tensors)
182 keras_tensors: The Tensors found that came from a Keras Layer.
183 """
--> 184 _, created_layers = _create_keras_history_helper(tensors, set(), [])
185 return created_layers
186
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer_utils.py in _create_keras_history_helper(tensors, processed_ops, created_layers)
229 constants[i] = backend.function([], op_input)([])
230 processed_ops, created_layers = _create_keras_history_helper(
--> 231 layer_inputs, processed_ops, created_layers)
232 name = op.name
233 node_def = op.node_def.SerializeToString()
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer_utils.py in _create_keras_history_helper(tensors, processed_ops, created_layers)
229 constants[i] = backend.function([], op_input)([])
230 processed_ops, created_layers = _create_keras_history_helper(
--> 231 layer_inputs, processed_ops, created_layers)
232 name = op.name
233 node_def = op.node_def.SerializeToString()
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer_utils.py in _create_keras_history_helper(tensors, processed_ops, created_layers)
227 else:
228 with ops.init_scope():
--> 229 constants[i] = backend.function([], op_input)([])
230 processed_ops, created_layers = _create_keras_history_helper(
231 layer_inputs, processed_ops, created_layers)
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/backend.py in __call__(self, inputs)
3746 return nest.pack_sequence_as(
3747 self._outputs_structure,
-> 3748 [x._numpy() for x in outputs], # pylint: disable=protected-access
3749 expand_composites=True)
3750
~/anaconda3/envs/tam-env/lib/python3.6/site-packages/tensorflow_core/python/keras/backend.py in <listcomp>(.0)
3746 return nest.pack_sequence_as(
3747 self._outputs_structure,
-> 3748 [x._numpy() for x in outputs], # pylint: disable=protected-access
3749 expand_composites=True)
3750
ValueError: Cannot convert a Tensor of dtype resource to a NumPy array.
重现错误的代码:
import tensorflow as tf
num_uids = 50
input_uid = tf.keras.layers.Input(shape=(1,), dtype=tf.int32)
params = tf.Variable(tf.random.normal((num_uids, 9)), trainable=True)
param = tf.gather_nd(params, input_uid)
input_shared_features = tf.keras.layers.Input(shape=(128,), dtype=tf.float32)
combined = tf.concat([param, input_shared_features], axis=-1)
net = tf.keras.layers.Dense(128)(combined)
我尝试过的东西很少:
- 我尝试使用 tf.keras.layers.Lambda 封装 tf.gather_nd 和 tf.concat。
- 我尝试将 tf.concat 替换为 tf.keras.layers.Concatenate。
奇怪的是,如果我指定项目的数量并将 Input 替换为 tf.Variable,代码将按预期工作:
import tensorflow as tf
num_uids = 50
input_uid = tf.Variable(tf.ones((32, 1), dtype=tf.int32))
params = tf.Variable(tf.random.normal((num_uids, 9)), trainable=True)
param = tf.gather_nd(params, input_uid)
input_shared_features = tf.Variable(tf.ones((32, 128), dtype=tf.float32))
combined = tf.concat([param, input_shared_features], axis=-1)
net = tf.keras.layers.Dense(128)(combined)
我将 Tensorflow 2.1 与 Python 3.6.10 一起使用
【问题讨论】:
-
combined输入的形状是什么? -
组合为:
-
@Gabe,我为此提出了一个 Github 问题。 github.com/tensorflow/tensorflow/issues/37441.
标签: python tensorflow keras tensorflow2.0