目录
记录背景:第一次接触人工智能开源项目 —— 斗地主打牌DouZero,记录接触过程中学到的概念和应用,以及Python创建接口C#服务端去发起请求。
Python创建接口
在Python中,可以使用多个框架来创建HTTP接口(API),其中最常用的是Flask和FastAPI。下面是使用这两种框架创建简单HTTP接口的示例。
使用Flask创建HTTP接口
-
安装Flask:
pip install Flask
-
创建一个简单的Flask应用:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/add', methods=["GET", "POST"]) def calculate(): if request.method == 'GET': params = request.args else: params = request.form if request.form else request.json a = params.get("a", 0) b = params.get("b", 0) c = int(a) + int(b) res = {"result": c} return jsonify(content_type='application/json;charset=utf-8', reason='success', charset='utf-8', status='200', content=res) if __name__ == '__main__': app.run(host='0.0.0.0', threaded=True, debug=False, port=8868)
-
运行应用:
将上述代码保存到一个文件(例如a pp.py
),然后在终端中运行:python app.py
-
调用接口:
-
http://127.0.0.1:8868/add?a=1&b=4
-
使用Flask创建HTTP接口
当你使用FastAPI创建一个Web示例时,你可以按照以下步骤进行:
-
安装FastAPI:
首先,确保你已经安装了FastAPI。如果没有安装,可以使用以下命令安装:pip install fastapi
-
创建应用程序:
创建一个Python文件(例如main.py
),并编写一个简单的FastAPI应用程序。以下是一个示例代码:
from fastapi import FastAPI
# 创建一个FastAPI实例
app = FastAPI()
# 创建一个路由,定义一个GET请求处理函数
@app.get("/")
async def read_root():
return {"Hello": "World"}
-
运行应用程序:
使用uvicorn
命令来运行FastAPI应用程序。在命令行中执行以下命令:uvicorn main:app --reload
main:app
指定了应用程序的模块和实例。--reload
参数表示在代码更改时自动重新加载应用程序。
-
访问应用程序:
应用程序启动后,你可以在浏览器中访问http://127.0.0.1:8000
(默认端口为8000),或者使用工具如curl
或Postman
发送GET请求来查看返回的数据。
通过按照上述步骤创建一个简单的FastAPI Web示例,你可以快速体验FastAPI的功能和简单的路由处理。你可以根据需要添加更多路由和功能来构建更复杂的Web应用程序。
总结
以上是使用Flask和FastAPI创建HTTP接口的基本示例。你可以根据需要扩展这些接口,添加更多的路由和功能。Flask适合简单的应用,而FastAPI则适合需要高性能和异步支持的应用。选择合适的框架可以帮助你更高效地开发API。
C#服务端向Python接口发起请求
知道了Python如何创建接口在去看C#服务端如何发起请求对接Python接口
using (HttpClient client = new HttpClient())
{
// 设置请求的URL
string url = "http://127.0.0.1:5000/api/";
url += ///请求接口的具体方法
var data = 向Python接口发送的Data数据;
try
{
// 发起GET请求
HttpResponseMessage response = await client.PostAsync(url,data);
// 确保请求成功
response.EnsureSuccessStatusCode();
// 读取响应内容
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
// 输出响应内容
}
catch (HttpRequestException e)
{
// 处理请求异常
Log.Info("Message :{0} " + e.Message);
return "1";
}
}
DouZero
下边链接是原版DouZero介绍的文章
https://zhuanlan.zhihu.com/p/389439772https://zhuanlan.zhihu.com/p/389439772
下边链接作者在DouZero的基础上具体应用到欢乐斗地主这块游戏中,通过识别牌型给DouZero然后出牌:
GitHub - Vincentzyx/DouZero_For_HLDDZ_FullAuto: 将DouZero用于欢乐斗地主自动化
Python版本3.9
Linux服务器安装Python3.9 Red Hat系列的Linux发行版中如何安装python3.9 - 安琪儿一直在 - 博客园 (cnblogs.com)
.ckpt
.ckpt
文件是 TensorFlow 框架中用于保存和恢复模型的检查点文件。它包含了模型的权重、偏置以及其他训练状态信息,可以在模型训练过程中定期保存,以便在需要时恢复训练或进行推理。
.ckpt
文件的具体用途
- 模型保存:在训练过程中,定期保存模型的状态,以防止因意外中断而丢失训练进度。
- 恢复训练:可以从最后保存的检查点恢复训练,继续训练而不需要从头开始。
- 模型评估:可以使用保存的模型进行评估,查看其在验证集或测试集上的表现。
- 推理:使用保存的模型进行推理,生成预测结果。
如何使用 .ckpt
文件
1. 保存模型
在 TensorFlow 中,可以使用以下代码保存模型:
import tensorflow as tf
# 假设你有一个模型
model = ... # 创建或训练你的模型
# 创建一个检查点回调
checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(
filepath='model_checkpoint.ckpt',
save_weights_only=True,
save_best_only=True
)
# 训练模型并保存检查点
model.fit(train_data, train_labels, callbacks=[checkpoint_callback])
2. 加载模型
要恢复模型的权重,可以使用以下代码:
import tensorflow as tf
# 创建模型
model = ... # 重新创建模型结构
# 加载检查点
model.load_weights('model_checkpoint.ckpt')
3. 继续训练
如果需要从保存的检查点继续训练,可以在加载权重后再次调用 fit
方法:
model.fit(train_data, train_labels, epochs=additional_epochs)
注意事项
- 确保在加载权重时,模型的结构与保存时一致。
- 如果使用自定义层或模型,可能需要在加载时提供相应的类定义。
通过使用 .ckpt
文件,可以有效地管理模型的训练过程,提高训练的效率和可靠性。
深拷贝浅拷贝的概念
深拷贝和浅拷贝都是在编程中经常遇到的概念,它们涉及到复制数据结构时的不同方式。以下是通俗易懂的解释:
浅拷贝(Shallow Copy)
- 浅拷贝就像复印件:当你进行浅拷贝时,你会得到一个新的数据结构,但这个新的数据结构中的元素只是原始数据结构中元素的引用,而不是新的独立的元素。
- 举个例子:假设你有一个书架,进行浅拷贝就好像复印了一个书架的清单,但实际上书架上的书还是同一本。
- 影响:如果你改变了浅拷贝后的数据结构中的元素,原始数据结构中的对应元素也会受到影响。
深拷贝(Deep Copy)
- 深拷贝就像复制原件:当你进行深拷贝时,你会得到一个全新的数据结构,其中的元素都是全新的独立的副本,而不是原始数据结构中元素的引用。
- 举个例子:继续以书架为例,进行深拷贝就是把原书架上的每本书都复制一份到新的书架上。
- 影响:深拷贝后的数据结构和原始数据结构完全独立,彼此之间的操作互不影响。
总结
- 浅拷贝:复制的是引用,修改一个会影响另一个。
- 深拷贝:复制的是值,独立存在,修改一个不会影响另一个。
在编程中,根据需要选择适合的拷贝方式可以避免意外的数据修改和逻辑错误。