Keras和pytorch报错集合整理

1、IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number

torch版本的不同造成的。
解决:将loss.data[0] 改成loss.item()

2、AttributeError: 'module' object has no attribute 'Cmd'

 完整报错:

Using TensorFlow backend.
Traceback (most recent call last):
  File "../create_pairs_dataset.py", line 3, in <module>
    import pose_transform
  File "/home/hyw/zp/keras/pose-gan-master/pose_transform.py", line 18, in <module>
    from tensorflow.contrib.image import transform as tf_affine_transform
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/__init__.py", line 37, in <module>
    from tensorflow.contrib import cudnn_rnn
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/cudnn_rnn/__init__.py", line 38, in <module>
    from tensorflow.contrib.cudnn_rnn.python.layers import *
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/cudnn_rnn/python/layers/__init__.py", line 23, in <module>
    from tensorflow.contrib.cudnn_rnn.python.layers.cudnn_rnn import *
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/cudnn_rnn/python/layers/cudnn_rnn.py", line 20, in <module>
    from tensorflow.contrib.cudnn_rnn.python.ops import cudnn_rnn_ops
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/cudnn_rnn/python/ops/cudnn_rnn_ops.py", line 22, in <module>
    from tensorflow.contrib.rnn.python.ops import lstm_ops
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/rnn/__init__.py", line 93, in <module>
    from tensorflow.contrib.rnn.python.ops.rnn_cell import *
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/rnn/python/ops/rnn_cell.py", line 24, in <module>
    from tensorflow.contrib.layers.python.layers import layers
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/layers/__init__.py", line 116, in <module>
    from tensorflow.contrib.layers.python.layers import *
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/__init__.py", line 33, in <module>
    from tensorflow.contrib.layers.python.layers.target_column import *
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/target_column.py", line 24, in <module>
    from tensorflow.contrib.losses.python.losses import loss_ops
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/losses/__init__.py", line 25, in <module>
    from tensorflow.contrib.losses.python import metric_learning
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/losses/python/metric_learning/__init__.py", line 25, in <module>
    from tensorflow.contrib.losses.python.metric_learning.metric_loss_ops import *
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/tensorflow/contrib/losses/python/metric_learning/metric_loss_ops.py", line 34, in <module>
    from sklearn import metrics
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/sklearn/metrics/__init__.py", line 7, in <module>
    from .ranking import auc
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/sklearn/metrics/ranking.py", line 36, in <module>
    from ..preprocessing import label_binarize
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/sklearn/preprocessing/__init__.py", line 6, in <module>
    from ._function_transformer import FunctionTransformer
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/sklearn/preprocessing/_function_transformer.py", line 5, in <module>
    from ..utils.testing import assert_allclose_dense_sparse
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/sklearn/utils/testing.py", line 751, in <module>
    import pytest
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/pytest.py", line 13, in <module>
    from _pytest.debugging import pytestPDB as __pytestPDB
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/site-packages/_pytest/debugging.py", line 6, in <module>
    import pdb
  File "/home/hyw/zp/Anaconda2_pytorch_keras/lib/python2.7/pdb.py", line 59, in <module>
    class Pdb(bdb.Bdb, cmd.Cmd):
AttributeError: 'module' object has no attribute 'Cmd'

报错原因分析: cmd.py是python的一个模块,而在我的代码树目录同样自定义了一个同名的模块cmd.py,该自定义的模块中无Cmd属性,python调用自身的cmd.py导致报错

解决办法:将自定义的cmd.py重命名为 cmdd.py,同时删除同目录下产生的 cmd.pyc文件,重新运行代码,问题解决

参考:  The kernel has died, and the automatic restart has failed

3、ImportError: No module named keras_contrib.layers.normalization

报错原因: Keras未安装 keras_contrib 包

解决办法: 安装即可: github安装链接     或者用这个链接:keras实现Bi-LSTM+CRF

使用该方式导入:from keras_contrib.layers.normalization.instancenormalization import InstanceNormalization

参考:ImportError: No module named 'keras_contrib'

tf.keras 和 keras有什么区别?

4、ValueError: Tensor._shape cannot be assigned, use Tensor.set_shape instead. 

解决办法:将 o._shape = tf.TensorShape(new_shape)  换为 :   o.set_shape = tf.TensorShape(new_shape)

 参考: https://github.com/bioinf-jku/TTUR/issues/6

5、ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [2048], [2048,1008].

解决办法:使用 : logits = tf.matmul(tf.squeeze(pool3, [1, 2]), w)   代替: logits = tf.matmul(tf.squeeze(pool3), w)

参考:ValueError: Shape must be rank 2 but is rank 1 for 'MatMul' (op: 'MatMul') with input shapes: [2048]

或者: Shape must be rank 2 but is rank 1 for 'MatMul'

6. opencv为4.1版本,img = cv2.imread(img_path),module cv2 has no imread member

分析: 其实代码是没有错误的,,可以直接运行的,就是cscode的插件检测不到模块而已, 主要原因是cv2模块下还有cv2模块,简单的让vscode不报错的方法是在添加包的时候添加

解决办法:  from cv2 import cv2

参考:解决vscode报错: Module 'cv2' has no 'imshow' member

7、 img = cv2.imread(img_path)     h, w, c = img.shape

Error:    h, w, c = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'

分析 :经过检查发现是图像路径中图像不存在

解决办法: 把图像路径填写正确就 OK了 

 参考: python图像处理问题AttributeError: 'NoneType' object has no attribute 'shape'

 8、Ubuntu18.04的系统,使用nvidia-smi就出来详细显卡信息了,但是过了段时间,再使用指令就出现这样的提示:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

问题分析:
NVIDIA驱动是在低版本的时候安装,由于系统更新,内核版本升级导致NVIDIA无法应用在高内核版本,所以,说明是内核版本的问题,选择低版本的内核即可。

 参考:https://blog.youkuaiyun.com/sinat_23619409/article/details/85220561

 

 

 

 

 

 

 

 

 

 

 

 

<think>嗯,用户想比较两个二进制文件image_bert_concat_embs.binvit_embeds_quantsim.bin是否包含相同的模块。首先,我需要理解“模块”在这里指的是什么。在深度学习的上下文中,模块通常指模型中的不同层或组件,比如卷积层、全连接层等。但是二进制文件本身是编译后的机器码或序列化的数据,直接查看模块结构可能不容易。 用户提到的这两个文件,后缀都是.bin,可能是PyTorch的模型权重文件,或者是其他框架保存的二进制文件。比如PyTorch通常使用.pth或.bin保存模型参数,而TensorFlow可能用.h5。但根据引用[1]中的情况,用户之前遇到过模型文件夹缺少pytorch_model.bin的情况,所以可能这两个文件是模型权重文件。 接下来,我需要考虑如何比较这两个二进制文件中的模块结构。直接比较二进制文件的内容可能不可行,因为它们可能包含不同的参数值,但用户关心的是模块结构是否相同,而不是参数值是否相同。因此,可能需要先加载这两个文件,查看它们的结构。 对于PyTorch模型,通常使用torch.load()加载.bin文件,然后遍历模型的state_dict来查看模块的键名。比如,可以加载两个文件,获取它们的state_dict,然后比较键名的集合是否相同。如果键名结构一致,可能说明模块结构相同。但需要注意的是,即使键名相同,各层的形状参数可能不同,但用户的问题只关注模块的存在与否,而非参数值。 不过用户可能遇到的问题是,如何在不运行代码的情况下比较这两个文件。或者是否有工具可以直接解析二进制文件的结构。这时候可能需要使用一些二进制分析工具,比如hexdump或binwalk,但这些工具通常只能显示二进制数据,无法直接解析出模块结构。因此,可能需要编程方法。 另外,考虑到用户之前提到的transformers库的问题(引用[3]),可能存在模块导入的问题,比如模型结构定义是否正确。因此,如果这两个文件是模型参数文件,那么需要对应的模型定义代码才能正确加载。如果模型定义不同,加载时可能会出错,或者加载后的模块结构不同。 因此,步骤可能包括: 1. 确认文件类型:是否是PyTorch的state_dict保存的.bin文件,或者是其他格式。 2. 尝试加载这两个文件,使用PyTorch的torch.load(),并检查它们的键名结构。 3. 如果加载成功,提取键名集合进行比较。 4. 如果加载失败,可能需要检查文件格式是否正确,或者是否有损坏。 5. 如果无法加载,可能需要用其他工具分析二进制结构,但这种方法可能比较复杂。 用户可能需要编写一个简单的Python脚本来加载这两个文件并比较它们的键。例如: ```python import torch def compare_modules(file1, file2): try: model1 = torch.load(file1) model2 = torch.load(file2) except Exception as e: print("加载失败:", e) return keys1 = set(model1.keys()) if isinstance(model1, dict) else set(model1.state_dict().keys()) keys2 = set(model2.keys()) if isinstance(model2, dict) else set(model2.state_dict().keys()) print("文件1中的模块:", keys1) print("文件2中的模块:", keys2) print("共同模块:", keys1 & keys2) print("文件1特有模块:", keys1 - keys2) print("文件2特有模块:", keys2 - keys1) compare_modules("image_bert_concat_embs.bin", "vit_embeds_quantsim.bin") ``` 但需要注意,如果这两个文件不是PyTorch的模型文件,或者保存的不是state_dict,而是整个模型,可能需要调整代码。例如,如果保存的是整个模型(包含结构),可能需要访问模型的modules()方法,而不仅仅是state_dict的键。 此外,用户可能需要安装正确版本的PyTorch相关的库,比如transformers,特别是如果这些模型依赖于特定的模型类(如BertModel),在加载时需要有对应的类定义,否则会报错(如引用[3]中的问题)。因此,如果这两个文件需要特定的模型类来加载,用户可能需要确保代码中正确导入了这些类,或者修改导入路径(如引用[2]中的解决方案)。 如果用户无法加载文件,可能需要检查文件是否完整,或者是否使用了正确的框架加载。例如,如果是TensorFlow的.h5文件,需要使用tf.keras.models.load_model(),但用户的问题中文件后缀是.bin,更可能是PyTorch的。 另一种可能是这些.bin文件是量化的模型或特定格式,比如ONNX,但需要相应的工具来解析。例如,使用ONNX Runtime加载并比较模型结构。 总结可能的步骤: 1. 使用PyTorch加载两个文件,提取模块名称。 2. 比较模块名称集合的差异。 3. 如果无法加载,检查文件格式依赖的模型代码。 4. 使用二进制比较工具,但这种方法只能比较二进制内容是否相同,无法判断模块结构是否相同。 另外,用户可能需要确认“模块”具体指什么。如果是模型的不同层或子模块的名称,则上述方法有效。如果是更底层的二进制模块,可能需要其他工具,但这种情况较少见。 最后,用户可能需要考虑版本兼容性问题,不同版本的库可能保存的模型结构不同,导致加载失败或键名变化。</think>### 比较二进制文件中模块的方法 要比较两个二进制文件(如`image_bert_concat_embs.bin``vit_embeds_quantsim.bin`)是否包含相同的模块,可按照以下步骤操作: --- #### **1. 确认文件类型与框架依赖** - **文件类型**:`.bin`文件通常是模型权重文件(如PyTorch的`state_dict`)或序列化数据。 - **框架依赖**: - 如果文件是PyTorch模型权重,需通过`torch.load()`加载[^1]。 - 如果涉及Transformers库(如BERT),需确保模型定义代码正确导入(例如将`from transformers.modeling_bert`改为`from transformers.models.bert.modeling_bert`)[^2][^3]。 --- #### **2. 加载文件并提取模块键名** 使用PyTorch加载文件并提取模块名称(以`state_dict`的键名为例): ```python import torch def compare_modules(file1, file2): try: model1 = torch.load(file1) model2 = torch.load(file2) except Exception as e: print("加载失败:", e) return # 提取键名(假设为state_dict格式) keys1 = model1.keys() if isinstance(model1, dict) else model1.state_dict().keys() keys2 = model2.keys() if isinstance(model2, dict) else model2.state_dict().keys() # 转换为集合比较差异 common = set(keys1) & set(keys2) unique1 = set(keys1) - set(keys2) unique2 = set(keys2) - set(keys1) print("共同模块:", common) print(f"{file1} 特有模块:", unique1) print(f"{file2} 特有模块:", unique2) compare_modules("image_bert_concat_embs.bin", "vit_embeds_quantsim.bin") ``` --- #### **3. 处理加载失败的场景** - **依赖缺失**:若报错`ModuleNotFoundError`,需检查模型定义代码是否与库版本兼容(如Transformers库的导入路径)[^3]。 - **文件损坏**:使用二进制工具(如`hexdump`)初步验证文件完整性: ```bash hexdump -C image_bert_concat_embs.bin | head -n 20 hexdump -C vit_embeds_quantsim.bin | head -n 20 ``` --- #### **4. 使用工具对比二进制结构** - **BinDiff**:适用于对比二进制文件的差异(如函数、符号表),但需文件包含调试信息。 - **自定义脚本**:若模块差异体现在特定字节模式,可编写脚本解析二进制头或元数据。 --- ### 方法总结 | 方法 | 适用场景 | 局限性 | |---------------------|---------------------------------|--------------------------| | **PyTorch键名对比** | 快速验证模块名称一致性 | 需能加载文件且依赖代码正确 | | **二进制工具分析** | 初步检查文件结构或损坏 | 无法直接关联深度学习模块 | | **BinDiff** | 分析底层函数或符号差异 | 需文件包含调试信息 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值