TensorFlow问题:Expected int32, got list containing Tensors of type '_Message' instead.

本文详细解析了在使用TensorFlow的tf.concat()函数时遇到的一个常见错误“Expected int32, got list containing Tensors of type '_Message' instead.”的原因及解决办法。此错误源于TensorFlow版本更新导致的参数顺序变化,文中提供了不同版本下的正确用法。
部署运行你感兴趣的模型镜像

1,前言

查阅了很多资料,发现出现这个报错的始作俑者就是tf.concat(),话不多说,直接上错误“Expected int32, got list containing Tensors of type '_Message' instead.”的原因和解决办法

2,原因

TensorFlow版本带来的错误,具体分析如下:

  • TensorFlow 1.0之前的版本,concat()的参数顺序是,数字在前,tensors在后,举例如下:
tf.concat(3,pooled_outputs_i)
  • TensorFlow 1.0之后的版本,concat()的参数顺序是,tensors在前,数字在后,举例如下:
tf.concat(pooled_outputs_i,3)

3,解决办法

聪明如你,看到原因里面的两个解释,你就应该知道怎么调试了吧、、、、、就是把concat的参数顺序调整一下就一切ok啦

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

file: lowercase_to_uppercase.s:1: error: parser: instruction expected file: lowercase_to_uppercase.s:2: error: parser: instruction expected file: lowercase_to_uppercase.s:3: error: parser: instruction expected file: lowercase_to_uppercase.s:4: error: parser: instruction expected file: lowercase_to_uppercase.s:6: error: parser: instruction expected file: lowercase_to_uppercase.s:7: error: parser: instruction expected file: lowercase_to_uppercase.s:8: error: parser: instruction expected file: lowercase_to_uppercase.s:11: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:12: error: parser: instruction expected file: lowercase_to_uppercase.s:13: error: expression syntax error file: lowercase_to_uppercase.s:15: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:16: error: parser: instruction expected file: lowercase_to_uppercase.s:18: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:19: error: parser: instruction expected file: lowercase_to_uppercase.s:21: error: label `cmpb' inconsistently redefined file: lowercase_to_uppercase.s:19: note: label `cmpb' originally defined here file: lowercase_to_uppercase.s:21: error: parser: instruction expected file: lowercase_to_uppercase.s:24: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:25: error: parser: instruction expected file: lowercase_to_uppercase.s:28: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:29: error: parser: instruction expected file: lowercase_to_uppercase.s:31: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:32: error: parser: instruction expected file: lowercase_to_uppercase.s:33: error: parser: instruction expected file: lowercase_to_uppercase.s:36: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:37: error: label `movl' inconsistently redefined file: lowercase_to_uppercase.s:32: note: label `movl' originally defined here file: lowercase_to_uppercase.s:37: error: parser: instruction expected file: lowercase_to_uppercase.s:39: error: label or instruction expected at start of line file: lowercase_to_uppercase.s:40: error: parser: instruction expected
最新发布
12-11
你遇到的错误: ``` error: parser: instruction expected error: label or instruction expected at start of line error: expression syntax error ``` 说明 **汇编器无法识别你的代码语法**,最可能的原因是:你使用的是 **Intel 语法风格的代码** 或 **AT&T 语法写错了格式**,但用的是不支持该语法的汇编器(比如 `nasm`),或者反过来。 --- ### 🔍 根本原因分析 你贴出的原始汇编代码是 **GNU 汇编器 `gas` 使用的 AT&T 语法**,但看起来你可能在使用 **NASM(Netwide Assembler)** 来汇编这个文件。 > ❌ 错误命令示例: ```bash nasm -f elf64 lowercase_to_uppercase.s -o out.o ``` ⚠️ **NASM 不支持 `.section`, `.globl`, `%` 寄存器等 GNU 风格语法(AT&T)以外的某些特性,且对指令格式要求更严格。** --- ## ✅ 正确解决方案:使用正确的工具链处理 AT&T 语法 你需要使用 **GNU Assembler (`as`) + GCC** 来编译 AT&T 语法的 `.s` 文件。 ### ✅ 正确编译步骤(Linux 系统下) ```bash # 使用 GNU as 汇编(注意是 .s 文件) as --64 lowercase_to_uppercase.s -o lowercase_to_uppercase.o # 使用 gcc 链接(因为调用了 printf) gcc -m64 lowercase_to_uppercase.o -o lowercase_to_uppercase ``` ✅ 然后运行: ```bash ./lowercase_to_uppercase ``` 输出应为: ``` Uppercase: H ``` --- ### 🛠️ 如果你坚持使用 NASM(Intel 语法),请改用以下版本 下面是将原程序 **转换为 NASM Intel 语法** 的完整版本(适用于 `nasm`): ```asm ; file: uppercase_nasm.asm ; 使用 NASM 编译:nasm -f elf64 uppercase_nasm.asm -o out.o extern printf global main section .data char: db 'h' ; 输入字符 fmt_str: db "Uppercase: %c", 10, 0 ; 格式化字符串(含换行和 null 结尾) section .text main: push rbp mov rbp, rsp ; 加载字符到 al mov al, [char] ; 判断是否在 'a' ~ 'z' cmp al, 'a' jl .print cmp al, 'z' jg .print ; 转大写:减去 32 sub al, 32 .print: ; 调用 printf("Uppercase: %c\n", char) mov rdi, fmt_str ; 第一个参数:格式字符串 mov rsi, rax ; 第二个参数:传递 AL 扩展后的值(高位已清零?需注意) and rsi, 0xFF ; 确保只保留低8位 xor rax, rax ; 不使用 XMM 寄存器 call printf ; 返回 0 xor eax, eax pop rbp ret ``` #### 使用 NASM 编译: ```bash nasm -f elf64 uppercase_nasm.asm -o uppercase_nasm.o gcc uppercase_nasm.o -o uppercase_nasm ./uppercase_nasm ``` --- ### 💡 如何判断你在用哪个汇编器? | 工具 | 支持语法 | 常见扩展名 | |------|--------|----------| | `as` (GNU Assembler) | AT&T 语法(默认) | `.s` | | `nasm` | Intel 语法 | `.asm` | | `yasm` | 类似 NASM | `.asm` | --- ### ✅ 小结:解决你的错误 你的错误是因为 **把 GNU AT&T 语法的 `.s` 文件拿去用 NASM 汇编了**,而 NASM 不认识 `.section .data`、`%rax` 这类写法。 🔧 **修复方法任选其一:** #### ✅ 方法 1:继续使用 GNU 工具链(推荐用于 `.s` 文件) ```bash as --64 lowercase_to_uppercase.s -o obj.o gcc obj.o -o output ``` #### ✅ 方法 2:改用 NASM 并重写为 Intel 语法(如上所示) ```nasm nasm -f elf64 your_file.asm -o obj.o gcc obj.o -o output ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值