AI 笔记

1 分钟读完

记录AI相关技术学习过程,包括一些python基础知识,算法介绍

配置MNIST数据转化

from torchvision import transforms

transformer = transforms.Compose([
    transforms.ToTensor()
])

通过transforms.Composse([...])方法可以自定义对MNIST数据的转化操作,可以添加例如转张量(tensor),单一化(Normalization 将数据范围统一,防止数据差异过大)等操作

获取MNIST数据

from torchvision import datasets

data = datasets.MNIST('data', 
    download=True,
    train=False,
    transform=transformer)

从MNIST获取数据,'data'是数据存储目录

配置数据加载方式

from torch.utils.data import DataLoader

loader = DataLoader(data, batch_size=1, shuffle=True)

DataLoader是可迭代的内容,可使用foreach循环遍历内容,shuffle控制数据每次加载是否打乱顺寻,打乱顺序可避免对数据顺序的依赖

import itertools
import matplotlib.pyplot as plt

for image, label in itertools.isLice(loader, 5):
    plt.axis("off")
    plt.title(label.item())
    plt.imshow(image.squeeze(), cmap="gray")
    plt.show()
  • axis()方法控制是否展示图片xy标签
  • item()方法可获取标量值
  • squeeze()去除张量中size为1的维度
  • isLice()方法可以将迭代器截断,此处只取用前5个值

Python 定义模型前置知识

先放完整代码

import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 256)
        self.fc2 = nn.Linear(256, 128)
        self.fc3 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(x.size(0), -1)
        x = torch.relu(fc1(x))
        x = torch.relu(fc2(x))
        x = fc3(x)
        return x


定义类

import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()

    def forward():
        return 1

此处定义了一个最基本的模型类,(nn.Module)表示继承自nn.Module,def __init__() 定义了一个初始化方法,通过super()来调用父类方法

Linear 线性函数

import torch.nn as nn
import torch

l = nn.Linear(28 * 28, 128)
data = torch.randn((10, 28 * 28))
l(data)
  • Linear()函数第一个参数为输入张量大小,第二个为输出张量大小
  • torch.randn产生一个符合正态分布的张量,大小为(10, 28 * 28)
  • (5,)表示一个一维五个元素的张量
  • Linear()函数计算公式output = input @ weight^T + bias, weight(output_size, input_size) 初始为随机值,后续会根据损失函数进行调整, bias(output_size,) 偏置向量, @矩阵乘法, ^T矩阵转置

ReLu 函数

import torch

torch.relu()

激活函数,提供非线性变换,公式:ReLU(x) = max(0, x),取x大于0的区间

调整张量形状

x = x.view(x.size(0), -1)
  • view(a, b) 将x调整为形状为(a, b)的张量,参数-1表示自动计算维度大小
  • size()获取张量的形状,参数0表示获取第一个维度的大小

LangChain 基于本地txt的知识库问答

安装依赖

pip install langchain
pip install unstructured
pip install tabulate
pip install pdf2image
pip install chromadb
pip install tiktoken

整体代码示例

来源: https://www.youtube.com/watch?v=EnT-ZTrcPrg

from langchain import OpenAI
from langchain import VectorDBQA
from langchain.document_loaders import DirectoryLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma


def qa_doc():
    loader = DirectoryLoader('docs', glob="**/*.txt")
    documents = loader.load()
    text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    texts = text_splitter.split_documents(documents)
    embeddings = OpenAIEmbeddings()
    docsearch = Chroma.from_documents(texts, embeddings)
    qa = VectorDBQA.from_chain_type(llm=OpenAI(), chain_type="stuff", vectorstore=docsearch)
    query = "What is Glueup"
    res = qa({"query": query})
    print(res["result"])
    print(res["source_documents"])


qa_doc()

https://playground.tensorflow.org/ 一个AI可视化的小工具

标签: ,

分类:

更新时间: