日常ERROR笔记

1、port:443报错

Failed to connect to raw.githubusercontent.com:443(https://zhuanlan.zhihu.com/p/115450863

2、Tensorflow:AssertionError: Bad argument number for Name: 3, expecting 4 (bug)

tf=1.14环境,查看安装的gast包版本,版本太高不兼容
pip install gast==0.2.2

3、h5文件错误:解决IOError Unable to open file file signature not found

h5文件0字节

4、ValueError: Tensor Tensor(“dense/Sigmoid:0”, shape=(?, 13), dtype=float32) is not an element of this graph.

keras模型在Flask应用中调用时就会出现该错误,本质原因是web应用的模型初始化和模型调用不在同一个线程导致的,解决方法:在load_model后,立刻调用一次predict。

5、tensorflow.python.framework.errors_impl.InvalidArgumentError: Tensor Input-Token:0, specified in either feed_devices or fetch_devices was not found in the Graph

(离线模型跑的好好的,放进web应用就各种报错~~~出现错误5,就无须错误4中的修改了)

因为需要加载两个模型,底层tensorflow面对两个模型懵圈分不清楚了,解决方法是定义不同的计算图和会话:
from tensorflow.python.keras.backend import set_session
import tensorflow as tf
# 程序开始时声明
# tf2中: graph = tf.compat.v1.get_default_graph()
# 在model加载前添加set_session
sess1 = tf.Session()
graph1 = tf.get_default_graph()
set_session(sess1)
model1.load_model(model_path1)
 
sess2 = tf.Session()
graph2 = tf.get_default_graph()
set_session(sess2)
model2.load_model(model_path2)
# 每次使用有关模型请求时
for each request:
    global sess1
    global graph1
    with graph1.as_default():
        set_session(sess1)
        model1.predict(...)
    global sess2
    global graph2
    with graph2.as_default():
        set_session(sess2)

6、ImportError: dlopen: cannot load any more object with static TLS

import kashgari时报该sklearn的错误,网上查资料,和包引用顺序之间有关系,*.py脚本中虽然没用到sklearn,但是在import kashgari之前import sklearn,完美解决该问题。

7、tensorflow.python.framework.errors_impl.InvalidArgumentError: No OpKernel was registered to support Op ‘CudnnRNN’ used by node

GPU训练的模型,本地CPU加载的时候报错,可以将带有cudnn的部分删除,本人代码里没有cudnn,只是将模型中的json文件中的cudnn删除,问题解决。

8、You can turn this error into a warning by using the flag ignore_longer_outputs_than_inputs

输出维度大于输入,tensorflow的话,将 ignore_longer_outputs_than_inputs改为True

tf.compat.v1.nn.ctc_loss(labels, inputs=None, sequence_length=None, preprocess_collapse_repeated=False, ctc_merge_repeated=True, ignore_longer_outputs_than_inputs=False, time_major=True,logits=None)

用keras的话,需要去安装包更改ignore_longer_outputs_than_inputs=True:

/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/ctc_ops.py
在这里插入图片描述

9、TypeError: get_encoders() got an unexpected keyword argument ‘use_adapter’

keras-transformer 版本问题

10、kashgari1.1.1 error

original_keras_version = f.attrs[‘keras_version’].decode(‘utf8’)
AttributeError: ‘str’ object has no attribute 'decode
python uninstall h5py
pip install h5py==2.10

11、NotImplementedError: Cannot convert a symbolic Tensor (up_sampling2d_5_target_2:0) to a numpy array.

tensorflow版本问题,更新到tf 2.2.0试试

12、TypeError: ‘BertTokenizerFast’ object is not callable

transformers版本问题,更新就好了

13、MaxOS/Linux 安装horovod报错: subprocess.CalledProcessError: Command '[‘cmake’ ERROR: Command errored out with exit status 1

MacOS:1.需要安装cmake,官网下载并安装(可搜教程);2.确保g++已安装;3.安装libuv
Linux:教程

14、训练几个batch后,损失函数为 nan

损失函数计算过程中,计算导数的时候,存在无穷大,tensorflow或keras可以分别利用tf.clip_by_value(value, min, max)或K.clip(value, min, max)设置上下界。

15、Error: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {“col1”:“val1”,“col2”:“val2”}

执行hive SQL,向动态分区表插入数据的时候,总报该错,单独插入该行或者加上limit,可以执行成功(这就很让人恼火),有说是引擎错误、有说是节点错误……一般解决方法SQL加上,关闭矢量查询:
set hive.vectorized.execution.enabled=false;
set hive.vectorized.execution.reduce.enabled=false;
不行的话再加上:
set hive.auto.convert.join=false;
但这都没有解决我的问题,最终又加上了几条设置才完美解决:
set hive.merge.cardinality.check=false;
set hive.exec.max.dynamic.partitions.pernode=500;
set hive.auto.convert.join.noconditionaltask = true;
set hive.auto.convert.join.noconditionaltask.size = 10000000;
set hive.auto.convert.sortmerge.join=true;

16、Container killed on request. Exit code is 143

hive SQL在进行分区合并的时候,由于分区多、数据量大,产生较多(100w+)的小文件,导致任务被杀死,此时没有太好的解决办法,可以较少动态分区的字段,或者将数据分批合并。

17、PermissionError: Permission denied: ‘/work’

在没有root权限的情况下,调用transformers包或者安装pytorch的扩展时,无法创建缓存文件夹,此时可以通过更改环境变量来实现(TRANSFORMERS_CACHE 或 TORCH_EXTENSIONS_DIR)
export TRANSFORMERS_CACHE=*****  #自定义有权限的路径
echo 'export TRANSFORMERS_CACHE=*****' >> ~/.bashrc
source ~/.bashrc

18、RuntimeError: Expected all tensors to be on the same device, but found at least two devices, CPU and cuda:0!

张量分在了不同了地方,没法计算,一般在源头 model.to_device() 就可以了。如果不是,可以将张量所在的地方打印出来,比如 input.device()。

19、同样的输入,transformer类模型输出的结果不一样

造成这种结果的原因主要有两个
  • transformer结构内部存在一些随机数的操作,固定随机数就可以了(tensorflow/pytorch)
import tensorflow as tf  
# 设置随机种子  
tf.random.set_seed(1234)  

import torch  
# 设置随机种子  
torch.manual_seed(1234)  
  • 禁用dropout
# 禁用dropout  
model.eval()  
# 使用模型进行预测  
outputs = model(**inputs)  
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值