运行TensorFlow简单音频识别教程出现Tensor无to_sparse属性报错
TensorFlow 1.14 音频识别代码
to_sparse报错解决方案 该报错是版本不兼容导致:你使用的官方音频教程基于TensorFlow 2.x开发,
Tensor.to_sparse()是TensorFlow 2.0及以上版本才提供的API,TensorFlow 1.14版本无该内置方法。你贴出的代码段是触发报错的入口,实际报错逻辑在map调用的get_waveform_and_label映射函数内部。
修复步骤如下:
- 第一步:开启动态图模式,匹配教程的运行逻辑
在代码最开头加入以下语句启用eager execution:import tensorflow as tf tf.enable_eager_execution() - 第二步:替换
to_sparse调用
找到get_waveform_and_label函数中所有调用xxx.to_sparse()的代码,替换为TensorFlow 1.14兼容的稀疏张量构造逻辑,示例如下:
原2.x版本写法:
替换为1.14兼容写法:sparse_tensor = your_dense_tensor.to_sparse()# 构造等价稀疏张量 indices = tf.where(tf.not_equal(your_dense_tensor, 0)) values = tf.gather_nd(your_dense_tensor, indices) dense_shape = tf.shape(your_dense_tensor, out_type=tf.int64) sparse_tensor = tf.SparseTensor(indices, values, dense_shape) - 第三步:调整
tf.data并行参数(可选,前两步执行后仍报错可尝试)
TensorFlow 1.14的num_parallel_calls参数存在少量兼容性问题,可先将并行映射改为普通映射验证逻辑:
验证逻辑跑通后,如需开启并行可将# 原代码 # waveform_ds = files_ds.map(get_waveform_and_label, num_parallel_calls=AUTOTUNE) # 替换为 waveform_ds = files_ds.map(get_waveform_and_label)AUTOTUNE替换为固定数值(如4,可根据CPU核心数调整)即可。
内容的提问来源于stack exchange,提问作者shivashankari
相关产品推荐
相关产品推荐

