人工智能开源项目DouZero,C#服务端对接Python接口

目录

Python创建接口

使用Flask创建HTTP接口

使用Flask创建HTTP接口

总结

C#服务端向Python接口发起请求

DouZero

.ckpt

.ckpt 文件的具体用途

如何使用 .ckpt 文件

1. 保存模型

2. 加载模型

3. 继续训练

注意事项

深拷贝浅拷贝

浅拷贝(Shallow Copy)

深拷贝(Deep Copy)

总结

记录背景:第一次接触人工智能开源项目 —— 斗地主打牌DouZero,记录接触过程中学到的概念和应用,以及Python创建接口C#服务端去发起请求。

Python创建接口

在Python中,可以使用多个框架来创建HTTP接口(API),其中最常用的是Flask和FastAPI。下面是使用这两种框架创建简单HTTP接口的示例。

使用Flask创建HTTP接口

python3写一个http接口服务(get, post),给别人调用2--flask_如何将自己的python算法发布一个服务,别人能够post请求-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/rensihui/article/details/103038262

  1. 安装Flask:

    pip install Flask
    
  2. 创建一个简单的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)
    
  3. 运行应用:
    将上述代码保存到一个文件(例如a pp.py),然后在终端中运行:

    python app.py
    
  4. 调用接口:

    • http://127.0.0.1:8868/add?a=1&b=4

使用Flask创建HTTP接口

当你使用FastAPI创建一个Web示例时,你可以按照以下步骤进行:

  1. 安装FastAPI:
    首先,确保你已经安装了FastAPI。如果没有安装,可以使用以下命令安装:

    pip install fastapi
    
  2. 创建应用程序:
    创建一个Python文件(例如main.py),并编写一个简单的FastAPI应用程序。以下是一个示例代码:

from fastapi import FastAPI

# 创建一个FastAPI实例
app = FastAPI()

# 创建一个路由,定义一个GET请求处理函数
@app.get("/")
async def read_root():
    return {"Hello": "World"}
  1. 运行应用程序:
    使用uvicorn命令来运行FastAPI应用程序。在命令行中执行以下命令:

    uvicorn main:app --reload
    
    • main:app 指定了应用程序的模块和实例。
    • --reload 参数表示在代码更改时自动重新加载应用程序。
  2. 访问应用程序:
    应用程序启动后,你可以在浏览器中访问http://127.0.0.1:8000(默认端口为8000),或者使用工具如curlPostman发送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/389439772icon-default.png?t=O83Ahttps://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 文件的具体用途

  1. 模型保存:在训练过程中,定期保存模型的状态,以防止因意外中断而丢失训练进度。
  2. 恢复训练:可以从最后保存的检查点恢复训练,继续训练而不需要从头开始。
  3. 模型评估:可以使用保存的模型进行评估,查看其在验证集或测试集上的表现。
  4. 推理:使用保存的模型进行推理,生成预测结果。

如何使用 .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)

  • 深拷贝就像复制原件:当你进行深拷贝时,你会得到一个全新的数据结构,其中的元素都是全新的独立的副本,而不是原始数据结构中元素的引用。
  • 举个例子:继续以书架为例,进行深拷贝就是把原书架上的每本书都复制一份到新的书架上。
  • 影响:深拷贝后的数据结构和原始数据结构完全独立,彼此之间的操作互不影响。

总结

  • 浅拷贝:复制的是引用,修改一个会影响另一个。
  • 深拷贝:复制的是值,独立存在,修改一个不会影响另一个。

在编程中,根据需要选择适合的拷贝方式可以避免意外的数据修改和逻辑错误。

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值