首页 > 其他分享 >Vitis AI 基本认知(线性回归)

Vitis AI 基本认知(线性回归)

时间:2024-08-15 09:52:16浏览次数:14  
标签:AI 模型 认知 Sequential Vitis 拟合 欠定 import model

目录

1. 目的

2. Tensor Flow

2.1 Sequential

2.2 Functional

3. PyTorch

4. 欠定系统

4.1 方程的解

4.2 欠定系统与过拟合

5. 总结


1. 目的

  • 学习不同深度学习框架下构建模型的区别。
  • 以简单的线性回归模型为例:y=\vec{W}x+b
  • 欠定系统与过拟合

2. Tensor Flow

在 Keras 中,介绍 Sequential 和 Functional 是两种不同的模型构建方式。

2.1 Sequential

特点:

  • 通过 Sequential() 创建模型,使用 model.add() 方法逐层添加网络层。这种方式简单直观,适用于线性堆叠的模型。
  • 不需要显式定义输入层,只需在第一层中指定 input_shape。
  • 适用于简单的线性堆叠模型,不支持共享层、多输入或多输出。
  • 代码结构简单,适合快速原型设计和简单模型。

示例代码:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 输入数据
X = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Y = tf.constant([[10.0], [20.0]])

# 创建模型
model = Sequential([
    Dense(1, activation=None, kernel_initializer='zeros', bias_initializer='zeros')
])

# 编译模型
model.compile(optimizer='sgd', loss='mse')

# 训练模型
model.fit(X, Y, epochs=500, verbose=0)

# 打印模型变量
print(model.variables)

 模型详细信息:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense_14 (Dense)            (None, 1)                 4         
                                                                 
=================================================================
Total params: 4
Trainable params: 4
Non-trainable params: 0
_________________________________________________________________

2.2 Functional

特点:

  • 需要显式定义输入层,然后逐层调用函数来构建模型。这种方式更灵活,适用于复杂的网络结构。
  • 支持复杂的网络拓扑结构,包括共享层、多输入和多输出,适用于更复杂的模型设计。
  • 代码结构更复杂,适用于需要复杂拓扑结构的模型,如残差网络(ResNet)和注意力机制(Attention)模型。

示例代码:

import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

# 输入数据
X = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Y = tf.constant([[10.0], [20.0]])

# 定义输入层
inputs = Input(shape=(3,))

# 定义输出层
output = Dense(1, activation=None, kernel_initializer='zeros', bias_initializer='zeros')(inputs)

# 创建模型
model = Model(inputs=inputs, outputs=output)

# 编译模型
model.compile(optimizer='sgd', loss='mse')

# 训练模型
model.fit(X, Y, epochs=500, verbose=0)

# 打印模型变量
print(model.variables)

 

3. PyTorch

import torch
import torch.nn as nn
import torch.optim as optim

# 输入数据
X = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Y = torch.tensor([[10.0], [20.0]])

# 定义模型
class LinearRegressionModel(nn.Module):
    def __init__(self):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(3, 1)
        # 初始化权重和偏置为零
        nn.init.zeros_(self.linear.weight)
        nn.init.zeros_(self.linear.bias)

    def forward(self, x):
        return self.linear(x)

model = LinearRegressionModel()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(500):
    model.train()
    optimizer.zero_grad()
    outputs = model(X)
    loss = criterion(outputs, Y)
    loss.backward()
    optimizer.step()

# 打印模型变量
for name, param in model.named_parameters():
    print(f"{name}: {param.data}")

模型训练,进行多次迭代(epoch),在每次迭代中:

  1. 设置模型为训练模式。
  2. 清空之前的梯度(optimizer.zero_grad())。
  3. 计算模型的输出。
  4. 计算损失。
  5. 进行反向传播(loss.backward())。
  6. 更新模型参数(optimizer.step())。

运行结果:

linear.weight: tensor([[0.0119, 1.1134, 2.2150]])
linear.bias: tensor([1.1015])

4. 欠定系统

4.1 方程的解

在这个线性系统中,有四个未知数(三个权重w1, w2, w3)和一个偏置(b),但只有两个方程。这构成了一个欠定系统,即方程的数量少于未知数的数量,方程可能有无限多个解,或者没有解。

在机器学习和统计建模中,这种情况非常常见,特别是在特征数量多于训练样本数量的情况下。为了解决这种情况,通常会采用以下方法之一:

1. 正则化:引入一种额外的约束(如 L1 或 L2 正则化)来控制模型复杂度,从而避免过拟合并帮助求解过程。

2. 增加数据:提供更多的训练数据可以帮助系统构建更多的方程,从而可能解决欠定的问题。

3. 减少特征数量:通过特征选择或降维技术减少输入特征的数量,使问题变得更易于管理。

4. 使用迭代优化方法:尽管系统欠定,但可以通过迭代算法(如梯度下降)找到使损失函数最小化的参数值。这些值可能不是唯一确定的,但可以是问题的有效解。

在以上代码示例中,使用了梯度下降算法来优化权重和偏置,目标是最小化预测输出和实际输出之间的均方误差。虽然理论上存在多个可能的解决方案,但梯度下降将寻找到这些解中的一个,这个解能够在给定的数据和模型配置下尽可能地减少损失函数。

尽管从理论上讲,这个线性系统可能没有唯一解,机器学习模型仍然可以通过优化技术找到一个合适的解,用于预测未见数据的输出。

4.2 欠定系统与过拟合

欠定系统(underdetermined system)

欠定系统是指方程的数量少于未知数的数量的情况。在这种情况下,可能有多个或无限多个解决方案满足这些方程。在机器学习中,当模型的参数(未知数)远多于可用的训练样本(方程)时,可以认为是一个欠定系统。这种情况下,找到一个唯一的、确定的解决方案可能是困难的或不可能的,因为有多个参数配置可以拟合数据。

过拟合(overfitting)

过拟合是指模型在训练数据上表现得异常好,但在新的、未见过的数据上表现不佳的现象。这通常发生在模型过于复杂,拥有大量自由度(参数),可以学习到训练数据中的噪声和特定细节,而不仅仅是潜在的、普遍适用的模式。过拟合的模型失去了泛化能力,即在新数据上的预测能力。

关系和区别

欠定系统可能导致过拟合。因为在参数数量过多而数据量不足的情况下,模型有能力学习到数据中的每一个具体细节和噪声,而不是只学习到更普遍的模式。

过拟合并不一定只因为欠定系统。过拟合也可以由于模型过于复杂或训练方法不当等其他因素引起。例如,即使在一个确定系统(方程数量等于未知数数量的系统)中,如果模型复杂度过高,也可能出现过拟合。
 

5. 总结

在本学习笔记中,笔者探讨了不同深度学习框架下构建线性回归模型的方式,主要集中于 TensorFlow 和 PyTorch。通过使用 Keras 的 Sequential 和 Functional API,我们展示了两种模型构建方式的特点与适用场景。Sequential API 适合简单的线性堆叠模型,而 Functional API 则提供了更大的灵活性,适用于复杂的网络结构。

在 PyTorch 中,我们定义了一个线性回归模型,通过自定义类实现模型结构,并使用标准的训练流程进行模型优化。这种方法突显了 PyTorch 的灵活性和可定制性。

此外,我们深入探讨了欠定系统及其与过拟合的关系。欠定系统是指方程数量少于未知数,这在机器学习中表现为参数数量多于训练样本。当模型参数过多而训练数据不足时,模型可能会学习到训练数据中的噪声,从而导致过拟合现象。过拟合使得模型在新数据上的泛化能力下降,虽然并非所有过拟合都源于欠定系统,但两者之间存在紧密联系。

综上所述,理解不同模型构建方式及欠定系统的特性,有助于我们在实际应用中选择合适的模型架构,并采取有效的策略来避免过拟合,从而提高模型的预测能力与泛化性能。

标签:AI,模型,认知,Sequential,Vitis,拟合,欠定,import,model
From: https://blog.csdn.net/DongDong314/article/details/141158479

相关文章

  • 只知道什么是 AI,没有听说过 LLM?只是其中一部分罢了
    什么是LLM呢?在人工智能(AI)领域,近年来最引人注目的技术之一就是大型语言模型(LLM,LargeLanguageModel)。随着自然语言处理(NLP)技术的发展,LLM逐渐成为了许多AI应用的核心驱动力。大型语言模型是一类基于深度学习的算法,旨在处理和生成自然语言。这些模型通过大量的文本数据进行......
  • 全球最强AI程序员 “Genie” 横空出世
    全球最强AI程序员“Genie”横空出世Genie是什么Genienotjustacopilot那么如何训练一名AI工程师呢Genie启动World’sbestAISoftwareEngineer.GenieisthebestAIsoftwareengineerintheworldbyfar-achievinga30%evalscoreontheindust......
  • AI狗语翻译器:揭秘跨物种沟通新科技,助力人宠心灵相通
    AI狗语翻译器、谷歌发布语音AI:traini的团队下了大功夫,他们邀请了宠物行为学专家,一起翻译狗狗的各种表情、行为和叫声,建立了一套宠物语义系统。可以确认AI狗语翻译器的开发团队确实下了大功夫,并且他们邀请了宠物行为学专家,一起翻译狗狗的各种表情、行为和叫声,建立了一套宠物......
  • “Datawhale x魔搭 AI夏令营”-AIGC方向-Day2从零入门AI生图原理&实践
    学习内容提要从通过代码实现AI文生图逐渐进阶,教程偏重图像工作流、微调、图像优化等思路,最后会简单介绍AIGC应用方向、数字人技术(选学)Task02:精读代码,实战进阶具体Datawhale教程学习内容见链接:https://linklearner.com/activity/14/10/32AIGC相关知识框图解读baseline代码文......
  • Python while编程题目|AI悦创Python一对一教学辅导
    你好,我是悦创。以下是十道有创意的while循环编程题目,每道题目都有一定的难度,适合锻炼编程逻辑和思维能力。题目1:旋转字符串描述:给定一个字符串,每次循环将字符串的第一个字符移到末尾,打印所有可能的旋转结果,直到回到原始字符串为止。输入:"abcde"输出:abcdebcdeacdeabde......
  • Datawhale AI夏令营 大模型(微调)Task01
    这次这个Task与以往有些不同,通过调节外部参数prompt和扩充数据来提高预测得分的大模型微调任务。此次任务最大的不同是不在修改代码去提高程序预测准确性,所以这次对大模型的训练的难点在与大模型所需的prompt与数据量上。下面是跟着教程做的一些步骤。1.首先是报名赛事。由......
  • Datawhale X 魔搭 AI夏令营 AIGC方向 task2笔记
       纯小白,自学!从零入门AI生图(AIGC方向)基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展实践学习。#DatawhaleX魔搭AI夏令营#一、利用AI精读baseline学习代码   task2的目的是精读baseline,从代码层面理解AI生图,直播演示了用通义千问解析代码,我也用GPT-4o,文心......
  • Sakana 推出开源AI Scientist:科研论文编写一条龙搞定
    你有没有想过,未来的科研会是怎样的?想象一下,一个不眠不休的研究助手,能够在没有人类监督的情况下,独立进行科学研究,从提出新想法到执行实验,再到撰写论文,全部自动完成。这听起来像科幻电影的情节,但在SakanaAI的努力下,这一愿景正在一步步变为现实。在现代科学研究中,科研人员常......
  • SenseCraft 部署模型到Grove Vision AI V2图像处理模块
    GroveVisionAIV2图像处理模块开箱测评摘要今天教大家快速上手GroveVisionAIV2图像处理模块,我们将一起探讨如何利用SenseCraft部署AI模型,和如何通过XIAOESP32C3调用这些模型,轻松实现智能视觉功能!原文链接:FreakStudio的博客往期推荐:学嵌入式的你,还不会面向对......
  • 产品经理用AI,跟普通人有什么不同?
    最近跟一个产品经理朋友聊天,他们公司最近单独拉一个只有产品经理的team,要在接下来半年把过去几年火过的产品工具,“加上AI驱动”重新做一遍。美其名曰“抓住AI浪潮的红利”。这不是今天的重点,重点是他在高频的用AI设计产品一段时间后,对“使用AI”这件事有了全新的......