Tensorflow加载ELMO模型报URLError Errno 60操作超时错误如何解决
错误原因
该urllib.error.URLError: [Errno 60] Operation timed out报错是因为代码调用hub.Module()时,TensorFlow Hub需要从官方远程服务器下载ELMO预训练模型文件,当前网络环境无法正常连通远程服务器导致请求超时。
可行解决方案
- 方案1:本地预下载模型加载
先在可正常访问tfhub.dev的网络环境下手动下载ELMO v3的模型压缩包,将下载后的压缩包解压到本地任意目录,替换代码中hub.Module()的远程地址为本地解压目录路径即可,修改后的代码参考:import tensorflow as tf import tensorflow_hub as hub import numpy as np import urllib.request if __name__ == '__main__': # 此处替换为你本地解压后的ELMO模型目录路径 elmo = hub.Module('./elmo_model',trainable=True) x = ["Hi my friend"] embeddings = elmo(tf.constant(x),signature="default",as_dict=True)["elmo"] print(embeddings.numpy()) - 方案2:配置运行环境网络代理
如果当前设备可通过代理访问目标服务,可在运行代码前先配置系统的HTTP/HTTPS代理环境变量,Mac/Linux终端执行示例命令:
Windows系统可直接在系统网络设置中添加对应代理配置后再运行代码。export HTTP_PROXY=http://代理地址:端口 export HTTPS_PROXY=http://代理地址:端口 - 方案3:延长网络请求超时阈值
网络波动也可能触发超时错误,可在加载模型前修改全局socket超时时间,代码中添加如下内容即可:import socket # 将默认超时时间调整为300秒,可根据自身网络情况调整数值 socket.setdefaulttimeout(300)
内容的提问来源于stack exchange,提问作者杨泽鹏
相关产品推荐
相关产品推荐

