Found unexpected keys that do not correspond to any Model output : dict_keys([‘dense_class‘]

解决TensorFlow模型编译问题
本文探讨了在使用TensorFlow构建模型时遇到的编译问题。重点在于确保模型的最后一层名称与编译时指定的metrics名称保持一致,以避免出现错误。文中详细介绍了具体的模型结构及编译配置。
部署运行你感兴趣的模型镜像

我试过改keras to tensorflow.keras,换过tensorflow版本都不行

每个情况都不同

我的情况是 model建立的时候命名和做loss计算的时候要保持一致

 

这是model最后输出层

out_class = TimeDistributed(Dense(nb_classes, activation='softmax', kernel_initializer='zero'),
                                name='dense_class_branch2_{}'.format(nb_classes))(out)
    # note: no regression target for bg class

out_regr = TimeDistributed(Dense(4 * (nb_classes - 1), activation='linear', kernel_initializer='zero'),
                               name='dense_regress_branch2_{}'.format(nb_classes))(out)
    return [out_class, out_regr]

compile的时候

model_classifier_branch2.compile(optimizer=optimizer_classifier, loss=[losses.class_loss_cls, losses.class_loss_regr(len(actions_count)-1)], metrics={'dense_class_branch2_{}'.format(len(actions_count)): 'accuracy'})

metrics 里面的名字和最后一层名字应该一样 都是dense_class_branch2_(len(actions_count)

 

 

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

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

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

### 解决 Jetson Orin Nano 上 jetson-inference 项目的构建问题 在 Jetson Orin Nano 上构建 `jetson-inference` 项目时,遇到的 CMake 错误主要包括目标名称冲突(`add_library target already exists`)和链接错误(`target_link_libraries error`),以及可能的 Bash 语法错误。以下是针对这些问题的详细解决方案。 --- #### 目标名称冲突:`add_library target already exists` CMake 报错提示目标 `jetson-inference-python-313` 已经存在,这通常是由于 Python 版本不匹配导致的目标名称硬编码问题[^1]。Orin Nano 默认使用 Python 3.10,而构建脚本可能错误地生成了与 Python 3.13 对应的目标名称。 解决方法是动态生成目标名称以适配当前使用的 Python 版本: ```cmake # 修改文件:jetson-inference/python/bindings/CMakeLists.txt execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor:02d}')" OUTPUT_VARIABLE PYTHON_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE ) # 使用动态生成的目标名称 cuda_add_library(jetson-inference-python-${PYTHON_SUFFIX} SHARED bindings.cpp image.cpp depth.cpp # 其他源文件... ) ``` 通过上述修改,目标名称将根据实际使用的 Python 版本动态生成,避免硬编码引发的冲突[^1]。 --- #### 链接错误:`target_link_libraries error` CMake 报错提示无法将库 `jetson-inference` 链接到目标 `jetson-inference-python-313`,这是因为 CMake 策略禁止跨目录链接[^2]。可以通过设置策略为 `NEW` 来解决此问题。 在项目根目录的 `CMakeLists.txt` 文件中添加以下内容: ```cmake # 设置 CMake 策略 cmake_policy(SET CMP0002 NEW) # 允许目标重名检查 cmake_policy(SET CMP0079 NEW) # 允许跨目录链接 ``` 此外,在 `python/bindings/CMakeLists.txt` 中确保链接方式正确: ```cmake # 修改链接库的方式 target_link_libraries(jetson-inference-python-${PYTHON_SUFFIX} PRIVATE jetson-inference # 使用非限定名称 ${PYTHON_LIBRARIES} ${CUDA_LIBRARIES} ${CUDA_cudart_static_LIBRARY} ) ``` 通过上述调整,可以解决链接策略相关的错误[^2]。 --- #### Bash 语法错误:`unexpected token newline COMMAND OUTPUT_VARIABLE` Bash 脚本中的语法错误通常由命令行格式不正确或转义字符缺失引起。例如,`COMMAND OUTPUT_VARIABLE` 的使用需要确保命令字符串完整且无多余换行或空格[^3]。 检查相关 CMake 脚本中的 `execute_process` 命令,确保其格式正确。以下是一个正确的示例: ```cmake execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor:02d}')" OUTPUT_VARIABLE PYTHON_SUFFIX OUTPUT_STRIP_TRAILING_WHITESPACE ) ``` 如果仍然出现语法错误,可以尝试将命令输出到日志文件以便调试: ```bash # 在终端运行以下命令以捕获输出 ${PYTHON_EXECUTABLE} -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor:02d}')" ``` 通过这种方式,可以验证命令是否正确执行并输出预期结果[^3]。 --- #### 构建命令示例 在完成上述修改后,使用以下命令重新构建项目: ```bash # 清理旧构建 cd ~/Desktop/jetson-inference rm -rf build mkdir build && cd build # 配置 CMake cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DPYTHON_EXECUTABLE=$(which python3) \ -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \ -DCUDNN_LIBRARY=/usr/lib/aarch64-linux-gnu/libcudnn.so.8 \ -DCMAKE_POLICY_DEFAULT_CMP0002=NEW \ -DCMAKE_POLICY_DEFAULT_CMP0079=NEW # 编译安装 sudo make -j$(nproc) install ``` --- #### 验证修复 完成构建后,验证生成的 Python 模块是否正确安装: ```bash # 检查生成的模块 ls /usr/local/lib/python*/dist-packages/jetson_inference_python*.so # 测试导入 python3 -c "from jetson_inference import detectNet; print(detectNet())" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值