StructBERT中文相似度WebUI保姆级教程:从‘无法访问’故障排查到日志定位全流程

StructBERT中文相似度WebUI保姆级教程:从‘无法访问’故障排查到日志定位全流程

你是不是遇到过这样的问题?好不容易部署了一个AI服务,打开网页却显示“无法访问此网站”,然后就开始各种抓瞎,不知道从哪里查起。今天我就来手把手带你搞定StructBERT中文相似度服务的WebUI,从最基础的访问故障排查,到日志定位问题根源,让你彻底告别“服务跑不起来”的烦恼。

StructBERT这个工具特别实用,它能帮你判断两句话的意思有多接近。比如“今天天气很好”和“今天阳光明媚”,相似度能达到0.85,说明意思很接近;而“今天天气很好”和“我喜欢吃苹果”相似度只有0.12,基本不相关。这个功能在客服问答匹配、文本去重、内容推荐等场景下特别有用。

1. 服务状态快速确认:你的服务真的在运行吗?

在开始排查之前,咱们先确认一下服务状态。很多时候问题就出在服务根本没启动,或者启动后自己挂掉了。

1.1 三种方法检查服务状态

方法一:最直接的进程检查

打开终端,输入这个命令:

ps aux | grep "python.*app.py" 

如果看到类似这样的输出,说明服务正在运行:

root 1234 0.5 2.1 1023456 78900 ? S 10:00 0:05 python app.py 

如果什么都没显示,或者只有grep进程本身,那服务就是没启动。

方法二:端口占用检查

服务默认运行在5000端口,检查这个端口有没有被占用:

netstat -tlnp | grep 5000 

正常应该看到:

tcp6 0 0 :::5000 :::* LISTEN 1234/python 

如果5000端口被其他程序占用了,你需要先停掉那个程序,或者给StructBERT换个端口。

方法三:健康检查接口

这是最靠谱的方法,直接问服务“你还活着吗?”:

curl http://127.0.0.1:5000/health 

正常情况会返回:

{ "status": "healthy", "model_loaded": true } 

如果返回Connection refused或者超时,那服务肯定有问题。

1.2 服务启动的正确姿势

如果发现服务没运行,别急着乱试,按顺序来:

第一步:用启动脚本(最简单)

cd /root/nlp_structbert_project bash scripts/start.sh 

这个脚本会帮你处理好所有环境变量和后台运行的问题。启动后等个10-20秒,让模型加载完成。

第二步:检查启动日志

启动后立即查看日志,看看有没有报错:

tail -f /root/nlp_structbert_project/logs/startup.log 

重点关注这几类信息:

  • Model loaded successfully - 模型加载成功
  • Running on http://0.0.0.0:5000 - 服务启动成功
  • 任何ErrorException开头的行 - 错误信息

第三步:验证服务

等个半分钟左右,再用健康检查确认:

# 等30秒再检查 sleep 30 curl http://127.0.0.1:5000/health 

2. 网络访问问题排查:为什么打不开网页?

服务明明在运行,curl也能访问,但就是打不开网页界面?这个问题最常见,也最让人头疼。

2.1 本地能访问,网页打不开

先做个简单的测试,在服务器本地用curl访问:

curl http://127.0.0.1:5000/ 

如果能看到HTML代码,说明服务本身没问题,问题出在网络配置上。

可能的原因和解决方案:

原因一:防火墙问题 有些服务器的防火墙会阻止外部访问5000端口。检查一下:

# 查看防火墙状态 sudo ufw status # 如果防火墙开启,添加5000端口规则 sudo ufw allow 5000/tcp sudo ufw reload 

原因二:服务绑定地址不对 检查app.py中的绑定地址:

# 正确的应该是0.0.0.0,表示监听所有网络接口 app.run(host='0.0.0.0', port=5000, threaded=True) # 如果是127.0.0.1,就只能本地访问 app.run(host='127.0.0.1', port=5000, threaded=True) # 错误! 

原因三:ZEEKLOG GPU Pod的特殊地址 如果你用的是ZEEKLOG的GPU Pod,访问地址是这样的格式:

http://gpu-pod698386bfe177c841fb0af650-5000.web.gpu.ZEEKLOG.net/ 

注意几点:

  • 中间的698386bfe177c841fb0af650是你的Pod ID,每个人不一样
  • 最后的5000要和服务端口一致
  • 整个地址是ZEEKLOG自动生成的,不能自己随便改

2.2 网页能打开,但显示“服务无法连接”

有时候网页能加载,但顶部的状态点显示红色,提示服务无法连接。这时候可以试试这个诊断脚本:

#!/usr/bin/env python3 """ 服务连接诊断脚本 保存为diagnose.py,然后运行:python diagnose.py """ import requests import time import sys def diagnose_service(): """诊断服务连接问题""" # 测试地址列表 test_urls = [ "http://127.0.0.1:5000/health", "http://localhost:5000/health", "http://0.0.0.0:5000/health" ] print("开始服务诊断...\n") for url in test_urls: print(f"测试 {url} ...") try: response = requests.get(url, timeout=5) if response.status_code == 200: print(f" ✓ 连接成功") print(f" 响应: {response.json()}") return True else: print(f" ✗ HTTP {response.status_code}") except requests.ConnectionError: print(f" ✗ 连接被拒绝") except requests.Timeout: print(f" ✗ 连接超时") except Exception as e: print(f" ✗ 错误: {e}") print() print("所有连接测试失败,建议:") print("1. 检查服务是否运行: ps aux | grep python") print("2. 检查端口占用: netstat -tlnp | grep 5000") print("3. 查看服务日志: tail -f logs/startup.log") print("4. 重启服务: bash scripts/restart.sh") return False if __name__ == "__main__": diagnose_service() 

运行这个脚本,它能帮你快速定位是哪个环节出了问题。

3. 日志定位:从错误信息找到问题根源

日志是排查问题的金钥匙,但很多人不知道怎么看。我来教你几招。

3.1 日志文件在哪里?

StructBERT服务有两个主要的日志文件:

# 启动和运行日志 /root/nlp_structbert_project/logs/startup.log # 服务详细日志(如果配置了) /root/nlp_structbert_project/logs/service.log 

3.2 怎么看日志?

实时查看日志(最常用)

tail -f /root/nlp_structbert_project/logs/startup.log 

Ctrl+C退出实时查看模式。

查看最近错误

# 查看最后100行 tail -100 /root/nlp_structbert_project/logs/startup.log # 只看错误信息 grep -i error /root/nlp_structbert_project/logs/startup.log # 只看警告 grep -i warning /root/nlp_structbert_project/logs/startup.log 

清空日志重新测试

有时候日志太多不好找,可以先清空再重现问题:

# 清空日志 > /root/nlp_structbert_project/logs/startup.log # 重启服务 bash /root/nlp_structbert_project/scripts/restart.sh # 立即查看日志 tail -f /root/nlp_structbert_project/logs/startup.log 

3.3 常见错误和解决方法

我整理了几个最常见的错误,你遇到问题时可以对照着查:

错误一:端口被占用

Address already in use 

解决方法:

# 找到占用5000端口的进程 sudo lsof -i :5000 # 或者 netstat -tlnp | grep 5000 # 停止那个进程,或者修改StructBERT的端口 

修改端口的方法:

# 编辑app.py vi /root/nlp_structbert_project/app.py # 找到最后一行,修改端口号 app.run(host='0.0.0.0', port=8080, threaded=True) # 改成8080 # 重启服务 bash /root/nlp_structbert_project/scripts/restart.sh 

错误二:内存不足

Killed 

或者日志突然中断,服务自动退出。

解决方法:

# 查看内存使用 free -h # 如果内存不足,可以: # 1. 关闭其他不必要的服务 # 2. 使用简化版模型(当前默认就是) # 3. 增加swap空间 

错误三:Python依赖问题

ModuleNotFoundError: No module named 'flask' 

解决方法:

# 激活虚拟环境 conda activate torch28 # 安装缺失的包 pip install flask # 或者重新安装所有依赖 pip install -r /root/nlp_structbert_project/requirements.txt 

错误四:模型加载失败

Error loading model: ... 

解决方法:

# 检查模型文件是否存在 ls -la /root/nlp_structbert_project/models/ # 如果使用完整版模型,确保安装了ModelScope pip install modelscope # 重启服务 bash /root/nlp_structbert_project/scripts/restart.sh 

4. Supervisor进程管理:让服务稳定运行

StructBERT服务已经配置了Supervisor进程管理,这是保证服务稳定运行的关键。

4.1 Supervisor是什么?

简单说,Supervisor就是个“服务保姆”,它能:

  • 开机自动启动服务
  • 服务崩溃了自动重启
  • 方便地查看服务状态和日志
  • 统一管理多个服务

4.2 常用Supervisor命令

# 查看所有服务状态 supervisorctl status # 查看StructBERT服务状态 supervisorctl status nlp_structbert # 启动服务 supervisorctl start nlp_structbert # 停止服务 supervisorctl stop nlp_structbert # 重启服务 supervisorctl restart nlp_structbert # 查看日志 supervisorctl tail -f nlp_structbert # 重新加载配置(修改配置文件后) supervisorctl reload 

4.3 开机自启配置

StructBERT已经配置好了开机自启,你可以在配置文件中看到:

cat /etc/supervisor/conf.d/nlp_structbert.conf 

关键配置:

[program:nlp_structbert] autostart=true # 开机自动启动 autorestart=true # 崩溃后自动重启 

这意味着:

  • 服务器重启后,服务会自动启动
  • 服务意外退出后,会自动重新启动
  • 你基本不用手动管理服务状态

4.4 如果Supervisor有问题

有时候Supervisor本身可能出问题,这时候可以:

# 重启Supervisor服务 sudo systemctl restart supervisor # 或者 sudo service supervisor restart # 查看Supervisor日志 sudo tail -f /var/log/supervisor/supervisord.log 

5. Web界面使用技巧

服务正常运行后,咱们来看看Web界面怎么用。访问地址是:

http://gpu-pod698386bfe177c841fb0af650-5000.web.gpu.ZEEKLOG.net/ 

5.1 单句对比:最常用的功能

界面很简单,主要就两个输入框和一个按钮:

  1. 在“句子1”输入第一句话
  2. 在“句子2”输入第二句话
  3. 点击“计算相似度”
  4. 看结果

结果怎么看?

相似度分数范围是0到1:

  • 0.7-1.0(绿色):意思很接近,可以认为是同一意思
  • 0.4-0.7(黄色):有点相关,但不完全相同
  • 0.0-0.4(红色):基本没关系,意思不同

界面右边还有示例按钮,点一下就能快速测试:

  • 相似句子示例:看看意思相近的句子能得多少分
  • 不相似句子示例:看看完全不同的句子得分多低
  • 相同句子示例:完全一样的句子肯定是1.0分

5.2 批量对比:一次比较多个句子

这个功能特别实用,比如你有100个问题,想找出哪个和用户的问题最匹配。

操作步骤:

  1. 在“源句子”输入要比对的标准句子
  2. 在“目标句子列表”输入多个句子,每行一个
  3. 点击“批量计算”
  4. 查看排序后的结果表格

实际应用例子:

# 假设你是客服系统,用户问:“我的快递为什么还没到” 源句子:我的快递为什么还没到 目标句子列表: - 我的包裹什么时候能送到 - 快递延误是什么原因 - 我要退货怎么操作 - 快递费用怎么计算 - 如何查询物流信息 

系统会自动计算每个句子和源句子的相似度,然后从高到低排序。这样你一眼就能看出“我的包裹什么时候能送到”和“快递延误是什么原因”是最相关的问题。

5.3 API接口:程序调用

如果你要在自己的程序里调用这个服务,可以用API接口。

Python调用示例:

import requests import json class StructBERTClient: """StructBERT服务客户端""" def __init__(self, base_url="http://127.0.0.1:5000"): self.base_url = base_url def similarity(self, sentence1, sentence2): """计算两个句子的相似度""" url = f"{self.base_url}/similarity" data = { "sentence1": sentence1, "sentence2": sentence2 } try: response = requests.post(url, json=data, timeout=10) response.raise_for_status() return response.json()["similarity"] except Exception as e: print(f"计算相似度失败: {e}") return None def batch_similarity(self, source, targets): """批量计算相似度""" url = f"{self.base_url}/batch_similarity" data = { "source": source, "targets": targets } try: response = requests.post(url, json=data, timeout=10) response.raise_for_status() results = response.json()["results"] # 按相似度排序 sorted_results = sorted( results, key=lambda x: x["similarity"], reverse=True ) return sorted_results except Exception as e: print(f"批量计算失败: {e}") return [] def health_check(self): """检查服务健康状态""" url = f"{self.base_url}/health" try: response = requests.get(url, timeout=5) return response.status_code == 200 except: return False # 使用示例 if __name__ == "__main__": client = StructBERTClient() # 检查服务 if client.health_check(): print("服务正常") else: print("服务异常") # 计算相似度 score = client.similarity("今天天气很好", "今天阳光明媚") print(f"相似度: {score}") # 批量计算 source = "如何重置密码" targets = [ "密码忘记怎么办", "怎样修改登录密码", "如何注册新账号", "找回密码的方法" ] results = client.batch_similarity(source, targets) for item in results: print(f"{item['sentence']}: {item['similarity']:.4f}") 

6. 实战应用案例

光说不练假把式,咱们来看几个实际的应用场景。

6.1 案例一:智能客服问答匹配

假设你有个客服系统,用户提问后,要自动找到知识库里最相关的问题。

def smart_customer_service(user_question, knowledge_base): """ 智能客服问答匹配 user_question: 用户问题 knowledge_base: 知识库,字典格式 {问题: 答案} """ # 提取所有问题 questions = list(knowledge_base.keys()) # 批量计算相似度 client = StructBERTClient() results = client.batch_similarity(user_question, questions) if not results: return "抱歉,我没有找到相关答案,请转人工客服。" # 获取相似度最高的 best_match = results[0] # 设置阈值 if best_match["similarity"] >= 0.7: answer = knowledge_base[best_match["sentence"]] return f"相关问题:{best_match['sentence']}\n答案:{answer}" else: return "抱歉,我没有找到相关答案,请转人工客服。" # 知识库示例 knowledge_base = { "如何修改密码": "请登录后进入个人中心,点击安全设置,选择修改密码。", "密码忘记了怎么办": "可以点击登录页的'忘记密码',通过手机验证码重置。", "如何注册账号": "点击首页的注册按钮,填写手机号和验证码即可。", "会员如何退款": "请联系客服人员,提供订单号和处理。" } # 测试 user_question = "我的密码想改一下" response = smart_customer_service(user_question, knowledge_base) print(response) 

6.2 案例二:文章去重系统

自媒体平台经常需要检测重复内容,这个功能就能派上用场。

def detect_duplicate_articles(new_article, existing_articles, threshold=0.85): """ 检测文章是否重复 new_article: 新文章内容 existing_articles: 已有文章列表 threshold: 相似度阈值,超过则认为重复 """ client = StructBERTClient() for i, article in enumerate(existing_articles): # 计算相似度 similarity = client.similarity(new_article, article) if similarity >= threshold: return { "is_duplicate": True, "similarity": similarity, "duplicate_with": f"第{i+1}篇文章", "suggest": "内容相似度过高,建议修改或删除" } return { "is_duplicate": False, "similarity": 0, "message": "内容通过查重检测" } # 测试 new_article = "深度学习在自然语言处理中的应用越来越广泛" existing_articles = [ "机器学习技术正在快速发展", "自然语言处理是AI的重要方向", "深度学习技术广泛应用于NLP领域", # 这个会匹配 "Python编程入门教程" ] result = detect_duplicate_articles(new_article, existing_articles) print(result) 

6.3 案例三:内容推荐引擎

根据用户阅读历史,推荐相似内容。

class ContentRecommender: """内容推荐引擎""" def __init__(self): self.client = StructBERTClient() self.contents = [] # 内容库 self.titles = [] # 标题库 def add_content(self, title, content): """添加内容到库""" self.contents.append(content) self.titles.append(title) def recommend(self, user_history, top_n=3): """根据用户历史推荐内容""" if not user_history or not self.contents: return [] # 计算用户历史与所有内容的相似度 all_scores = [] for history in user_history: results = self.client.batch_similarity(history, self.contents) all_scores.extend(results) # 去重并排序 seen = set() unique_results = [] for item in all_scores: idx = self.contents.index(item["sentence"]) if idx not in seen: seen.add(idx) unique_results.append({ "title": self.titles[idx], "content": item["sentence"], "similarity": item["similarity"] }) # 按相似度排序 sorted_results = sorted( unique_results, key=lambda x: x["similarity"], reverse=True ) return sorted_results[:top_n] # 使用示例 recommender = ContentRecommender() # 添加一些内容 recommender.add_content("AI技术发展", "人工智能技术正在快速发展...") recommender.add_content("机器学习入门", "机器学习是AI的核心技术...") recommender.add_content("深度学习应用", "深度学习在图像识别领域...") recommender.add_content("自然语言处理", "NLP技术让机器理解人类语言...") # 用户阅读历史 user_history = [ "人工智能的最新进展", "机器学习算法介绍" ] # 推荐 recommendations = recommender.recommend(user_history, top_n=2) print("为您推荐:") for item in recommendations: print(f"- {item['title']} (相似度: {item['similarity']:.2f})") 

7. 性能优化和高级技巧

7.1 提高计算速度

如果你需要处理大量文本,速度很重要。这里有几个优化建议:

批量处理,减少网络请求

# 不好的做法:一个个计算 for target in targets: similarity = client.similarity(source, target) # 每次都要网络请求 # 好的做法:批量计算 results = client.batch_similarity(source, targets) # 一次请求搞定 

缓存结果

对于重复的计算,可以缓存起来:

from functools import lru_cache import hashlib class CachedStructBERTClient(StructBERTClient): """带缓存的客户端""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.cache = {} def _get_cache_key(self, sentence1, sentence2): """生成缓存键""" # 排序,使s1+s2和s2+s1的缓存键相同 sorted_sentences = tuple(sorted([sentence1, sentence2])) key = hashlib.md5(str(sorted_sentences).encode()).hexdigest() return key def similarity(self, sentence1, sentence2): """带缓存的相似度计算""" cache_key = self._get_cache_key(sentence1, sentence2) if cache_key in self.cache: return self.cache[cache_key] # 计算并缓存 result = super().similarity(sentence1, sentence2) if result is not None: self.cache[cache_key] = result return result 

预处理文本

计算前清理文本,能提高准确性和速度:

def preprocess_text(text): """文本预处理""" import re # 去除多余空格.join(text.split()) # 转小写(中文不需要,英文需要) # text = text.lower() # 去除特殊字符(根据需求) # text = re.sub(r'[^\w\s\u4e00-\u9fff]', '', text) return text # 使用 s1 = preprocess_text(" 今天 天气 很好 !") s2 = preprocess_text("今天阳光明媚。") similarity = client.similarity(s1, s2) 

7.2 设置合理的相似度阈值

不同的应用场景需要不同的阈值:

# 阈值配置 THRESHOLDS = { "strict": 0.9, # 严格查重,如论文查重 "qa": 0.7, # 问答匹配,如客服系统 "semantic": 0.5, # 语义理解,如文本分类 "loose": 0.3, # 宽松匹配,如相关内容推荐 } def classify_similarity(score, mode="qa"): """根据阈值分类相似度""" threshold = THRESHOLDS.get(mode, 0.7) if score >= threshold: return "匹配" else: return "不匹配" # 使用示例 score = 0.85 print(f"严格查重: {classify_similarity(score, 'strict')}") # 不匹配 print(f"问答匹配: {classify_similarity(score, 'qa')}") # 匹配 print(f"语义理解: {classify_similarity(score, 'semantic')}") # 匹配 

7.3 处理长文本

StructBERT主要针对句子级别的相似度,对于长文本,可以这样处理:

def long_text_similarity(text1, text2, chunk_size=100): """ 长文本相似度计算 将长文本分块,计算块之间的相似度,取平均值 """ def split_text(text, size): """将文本分成指定大小的块""" words = text.split() chunks = [] for i in range(0, len(words), size):.join(words[i:i+size]) chunks.append(chunk) return chunks # 分块 chunks1 = split_text(text1, chunk_size) chunks2 = split_text(text2, chunk_size) # 计算每对块的相似度 similarities = [] client = StructBERTClient() for c1 in chunks1: for c2 in chunks2: score = client.similarity(c1, c2) if score is not None: similarities.append(score) # 计算平均相似度 if similarities: return sum(similarities) / len(similarities) else: return 0.0 # 使用示例 text1 = "这是一段较长的文本内容..." * 10 text2 = "这是另一段较长的文本内容..." * 10 similarity = long_text_similarity(text1, text2) print(f"长文本相似度: {similarity:.4f}") 

8. 故障排查流程图

为了帮你更快定位问题,我整理了这个排查流程图:

graph TD A[无法访问Web界面] --> B{本地能访问吗?}; B -->|能| C[网络/防火墙问题]; B -->|不能| D{服务进程在运行吗?}; D -->|在| E[检查端口绑定]; D -->|不在| F[启动服务]; C --> G[检查防火墙设置]; C --> H[确认访问地址]; E --> I[检查host是否为0.0.0.0]; E --> J[检查端口是否被占用]; F --> K[查看启动日志]; F --> L[检查依赖和环境]; G --> M[开放5000端口]; H --> N[使用正确的外部地址]; I --> O[修改为0.0.0.0]; J --> P[更换端口或停止占用程序]; K --> Q[根据错误信息解决]; L --> R[安装缺失依赖]; M --> S[问题解决]; N --> S; O --> S; P --> S; Q --> S; R --> S; 

按照这个流程图一步步排查,大部分问题都能找到原因。

9. 总结

StructBERT中文相似度WebUI是个非常实用的工具,但在使用过程中难免会遇到各种问题。通过今天的教程,你应该掌握了:

  1. 服务状态检查:三种方法确认服务是否正常运行
  2. 网络问题排查:从本地访问到外部访问的完整排查流程
  3. 日志分析技巧:如何从日志中找到问题根源
  4. Supervisor管理:让服务稳定运行的关键配置
  5. Web界面使用:单句对比和批量对比的实用技巧
  6. API编程接口:如何在代码中调用服务
  7. 实战应用案例:客服系统、内容去重、推荐引擎的实现
  8. 性能优化:缓存、批量处理、阈值设置等高级技巧
  9. 故障排查:完整的排查流程图和解决方案

记住几个关键命令:

  • 检查服务:ps aux | grep "python.*app.py"
  • 测试连接:curl http://127.0.0.1:5000/health
  • 查看日志:tail -f logs/startup.log
  • 重启服务:bash scripts/restart.sh

遇到问题时不要慌,按照我们今天讲的步骤一步步排查。大部分问题都能通过查看日志找到原因。如果还是解决不了,记得检查一下服务是否真的在运行,这是最常见的问题。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 ZEEKLOG星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Read more

【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)

【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)

前言 Python 是当今最流行的编程语言之一,广泛应用于 Web 开发、数据分析、人工智能、自动化脚本等领域。而 PyCharm 作为 JetBrains 公司推出的 Python 专业集成开发环境(IDE),凭借智能代码补全、调试器、虚拟环境管理、版本控制集成等强大功能,成为众多开发者首选工具。 本教程专为 Windows 系统用户 编写,将手把手指导你完成 Python 解释器 和 PyCharm IDE 的下载、安装与基础配置,助你快速搭建本地 Python 开发环境。 一、Python 下载与安装 1.1 访问 Python 官网 打开浏览器,访问 Python 官方网站:Download

By Ne0inhk
Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 * 一、前言 * 二、基本介绍 * 2.1全过程软件基本介绍 * 2.1.1 Pytorch * 2.1.2 Anaconda * 2.1.3 Pycharm * 2.1.4 显卡GPU及其相关概念 * 2.1.5 CUDA和cuDNN * 2.2 各部分相互间的联系和安装逻辑关系 * 三、Anaconda安装 * 3.1安装Anaconda * 3.2配置环境变量 * 3.3检验是否安装成功 * 四、Pycharm安装 * 五、Anaconda和Pycharm的基本使用 * 5.1Anaconda的基本使用 * 5.1.1Anaconda的一些基本指令 * 5.1.2有关下载源的一些指令和说明

By Ne0inhk
【启发式算法】RRT*算法详细介绍(Python)

【启发式算法】RRT*算法详细介绍(Python)

📢本篇文章是博主人工智能(AI)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉启发式算法专栏:        【启发式算法】(9)---《RRT*算法详细介绍(Python)》 【启发式算法】RRT*算法详细介绍(Python) 目录 1. RRT*算法 2.算法原理 RRT*与RRT的区别 3.算法步骤 步骤详细说明 4.RRT*的关键原理 1. 树的扩展 2. 路径优化 3. 连接最短路径 4. 渐进最优性 [Python] RRT*算法实现 [Results] 运行结果 [Notice]  注意事项

By Ne0inhk
探索Python融合地学:一文教会你下载ERA5-Land数据

探索Python融合地学:一文教会你下载ERA5-Land数据

再分析数据在气象学领域用的比较多,下载数据有的时候还挺头疼的。今天小编教你下载ERA5-Land数据的三种方式。话不多说,咱们学起来! 一、官网下载 贴出官网:https://cds.climate.copernicus.eu/datasets/reanalysis-era5-land?tab=download 相较于ERA5数据,Land数据空间分辨率提高了,为0.1°格网,时间分辨率同样是逐小时,可以说已经很方便大家开展各项研究了。 第一步:注册个人账号,在右上角的人像这里点击可以注册个人的账号,这里不多说。 第二步:点击“Download”,进入下载界面,在下载界面你可以看到很多气象变量,我们随便选择一种气象要素,比如风的U/V分量,支持多选。 第三步:选择研究时段,这里可以选择某年某个月的所有日期的数据。bug在于,它只能一个月一个月申请下载,如果你研究时间尺度很长,每一年得点12下,下载12份文件,再下载下一年的。所以,如果你是一个体验者,推荐用这种方法。如果你是一个研究者,

By Ne0inhk