TensorFlow视频分类教程报错:Tensor不可哈希,建议用tensor.ref()作为键
解决TensorFlow视频分类训练时Tensor不可哈希的错误
问题根源
该错误是einops与当前TensorFlow版本不兼容导致的——新版TensorFlow调整了Tensor的哈希机制,而旧版einops的rearrange方法仍在尝试直接将Tensor作为哈希键使用,从而触发报错。
可行解决方案
指定兼容的einops版本
安装经过验证的兼容版本,比如0.6.1或0.5.0:pip install einops==0.6.1 --force-reinstall用TensorFlow原生API替代einops.rearrange
直接修改ResizeVideo层中的rearrange调用,改用TensorFlow原生的transpose和reshape实现相同逻辑。例如原代码:x = rearrange(x, 'b t h w c -> b h w t c')替换为:
x = tf.transpose(x, perm=[0, 2, 3, 1, 4])这种方式完全避开einops的哈希问题,且性能更贴合TensorFlow生态。
调整TensorFlow版本
如果是TensorFlow版本过高导致的兼容问题,可降级到2.14.0版本:pip install tensorflow==2.14.0 --force-reinstall包装einops调用为PyFunction
若必须保留einops,可在ResizeVideo层的call方法中用tf.py_function包装rearrange调用,强制在Eager模式下执行:def rearrange_tensor(x): from einops import rearrange return rearrange(x, 'b t h w c -> b h w t c') x = tf.py_function(rearrange_tensor, [x], Tout=tf.float32) # 手动设置输出形状,避免Graph模式下形状丢失 x.set_shape(x.shape.as_list())
内容的提问来源于stack exchange,提问作者Hammond
相关产品推荐
相关产品推荐

