当前位置: 首页 > news >正文

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络

本次开启深度学习第十五回,基于Pytorch的神经网络编码器。本回分享的是GAN生成对抗网络。在本回中,通过minist数据集来分享如何建立一个GAN生成对抗网络。接下来给大家分享具体思路。
本次学习,借助的平台是PyCharm 2024.1.3,python版本3.11 numpy版本是1.26.4,pytorch版本2.0.0


前言

讲述模型前,先讲述两个概念,统一下思路:

1、GAN网络

生成对抗网络(Generative Adversarial Network,GAN)是一种通过“对抗训练”生成与真实数据相似数据的深度学习模型。它的核心思想是让两个神经网络,即生成器和判别器之间相互博弈,最终生成以假乱真的数据。

1)生成器

生成器负责‌从随机噪声中生成逼真的假数据‌,其本质是通过学习真实数据的分布规律,创造出与真实数据高度相似的新样本。

2‌)判别器

判别器的任务是‌区分真实数据与生成数据的差异,并通过反馈优化生成器‌。

注:

生成器与判别器的目标函数对立,二者通过对抗训练实现数据生成与优化的动态平衡。即:

生成器的优化方向‌:最小化判别器对生成数据的判别准确率(即让判别器误判生成数据为真)‌。
‌判别器的优化方向‌:最大化对真实数据与生成数据的正确分类概率‌。

闲言少叙,直接展示逻辑,先上引用:

import torch
from torch import nn
import torchvision.transforms as tfs
from torch.utils.data import DataLoader, sampler
from torchvision.datasets import MNIST
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import time

一、数据准备 

首先准备MNIST数据集,并进行数据的预处理。关于数据集、数据加载器的介绍,可以查看第五回内容

data_treating = tfs.Compose([tfs.ToTensor(),tfs.Normalize([0.5], [0.5])
])train_set = MNIST('./data', transform=data_treating)
train_data = DataLoader(train_set, batch_size=128)
val_set = MNIST('./data', train=True, transform=data_treating)
val_data = DataLoader(val_set, batch_size=128)

二、模型建立

为了更好的捕捉图像的轮廓细节,提高图像生成的清晰程度,生成器和判别器在全连接层的基础上添加了卷积层。

1.生成器建立

建立生成器的网络模型。其结构如下所示:

class create_net(nn.Module):def __init__(self):super(create_net, self).__init__()self.fc = nn.Sequential(nn.Linear(96, 1024),nn.ReLU(True),nn.BatchNorm1d(1024),nn.Linear(1024, 7 * 7 * 128),nn.ReLU(True),nn.BatchNorm1d(7 * 7 * 128))self.conv = nn.Sequential(nn.ConvTranspose2d(128, 64, 4, 2, padding=1),nn.ReLU(True),nn.BatchNorm2d(64),nn.ConvTranspose2d(64, 1, 4, 2, padding=1),nn.Tanh())def forward(self, x):x = self.fc(x)x = x.view(x.shape[0], 128, 7, 7)x = self.conv(x)return x

2.判别器建立

建立判别器的网络模型,代码如下:

class decide_net(nn.Module):def __init__(self):super(decide_net, self).__init__()self.conv = nn.Sequential(nn.Conv2d(1, 32, 5, 1),nn.LeakyReLU(0.01),nn.MaxPool2d(2, 2),nn.Conv2d(32, 64, 5, 1),nn.LeakyReLU(0.01),nn.MaxPool2d(2, 2))self.fc = nn.Sequential(nn.Linear(1024, 1024),nn.LeakyReLU(0.01),nn.Linear(1024, 1))def forward(self, x):x = self.conv(x)x = x.view(x.shape[0], -1)x = self.fc(x)return x

3、损失函数和优化函数的建立

对判别器和生成器分别建立损失函数,并建立优化函数。

判别器的损失公式为:L =−[  Ex[log D(x)]+Ez[log(1−D(G( z )) ]  ]

生成器的损失公式为:L =−Ez[ log D(G(z) ) ]

代码如下:

loss_f = nn.BCEWithLogitsLoss()def decide_loss(real_data, fake_data):size = real_data.shape[0]true_labels = torch.ones(size, 1).float().cuda()false_labels = torch.zeros(size, 1).float().cuda()loss = loss_f(real_data, true_labels) + loss_f(fake_data, false_labels)return loss
def create_loss(fake_data):size = fake_data.shape[0]true_labels = torch.ones(size, 1).float().cuda()loss = loss_f(fake_data, true_labels)return loss
def get_optimizer(net):optimizer = torch.optim.Adam(net.parameters(), lr=3e-4, betas=(0.5, 0.999))return optimizer

4、图片转换函数的建立

由于训练时采用的数据与我们所需呈现的数据格式不一样,因此需要转换函数将数据进行数据格式转换。

def deprocess_image(x):return (x + 1.0) / 2.0def show_images(images):plt.rcParams['image.interpolation'] = 'nearest'plt.rcParams['image.cmap'] = 'gray'images = np.reshape(images, [images.shape[0], -1])change_im1 = int(np.ceil(np.sqrt(images.shape[0])))change_im2 = int(np.ceil(np.sqrt(images.shape[1])))grid_map = gridspec.GridSpec(change_im1, change_im1)grid_map.update(wspace=0.05, hspace=0.05)for i, img in enumerate(images):ax = plt.subplot(grid_map[i])plt.axis('off')ax.set_xticklabels([])ax.set_yticklabels([])ax.set_aspect('equal')plt.imshow(img.reshape([change_im2, change_im2]))return

三、模型的训练

1、训练函数的建立

训练函数由两部分组成,一部分是对判别器进行训练,另一部分是对生成器进行训练。

对判别器进行训练时,先将真实数据 real_data 送入判别器 decide_f 生成判定结果decide_real;再将融入噪声的数据 noise_data 送入生成器 create_f 中生成数据 fake_data;fake_data 送入判别器 decide_f 生成判定结果 decide_fake,最后将 decide_real 和 decide_fake 送入损失函数 decide_loss 中获得损失值 decide_error。接着就和前几回分享的内容一样,即梯度归零、计算新梯度、参数更新。

对生成器进行训练时,将融入噪声的数据 noise_data 送入生成器 create_f 中生成数据 generate_data;fake_data 送入判别器 decide_f 生成判定结果 generate_fake, generate_fake送入损失函数  generate_loss 中获得损失值  generate_error。接着的如上文所示。

代码如下所示:

def train_dc_gan(decide_f, create_f, decide_optimizer, create_optimizer, decide_loss,generate_loss, show_time=500,noise_size=96, num_epochs=10):time1 = time.time()iter_count = 0for epoch in range(num_epochs):for x, _ in train_data:data_in = x.shape[0]real_data = x.cuda()decide_real = decide_f(real_data)data_noise = (torch.rand(data_in, noise_size) - 0.5) / 0.5noise_data = data_noise.cuda()fake_data = create_f(noise_data)decide_fake = decide_f(fake_data)decide_error = decide_loss(decide_real, decide_fake)decide_optimizer.zero_grad()decide_error.backward()decide_optimizer.step()noise_data = data_noise.cuda()generate_data = create_f(noise_data)generate_fake = decide_f(generate_data)generate_error = generate_loss(generate_fake)create_optimizer.zero_grad()generate_error.backward()create_optimizer.step()time_consume = time.time() - time1if (iter_count % show_time == 0):print('Iter:	{},	Decode:	{:.4},	encode:{:.4},  time:{:.3f}s'.format(iter_count,decide_error,generate_error,time_consume))iter_count += 1images_data = deprocess_image(fake_data.data.cpu().numpy())show_images(images_data[0:16])plt.show()

2、实例化训练模型并训练

decide_function = decide_net().cuda()
create_function = create_net().cuda()
decide_optim = get_optimizer(decide_function)
create_optim = get_optimizer(create_function)
train_dc_gan(decide_function, create_function, decide_optim, create_optim, decide_loss, create_loss, num_epochs=5)

输出展示如下:

Iter:    0,    Decode:    1.394,    encode:0.9122,  time:1.738s
Iter:    500,    Decode:    0.9634,    encode:0.6716,  time:69.306s
Iter:    1000,    Decode:    0.9186,    encode:1.259,  time:133.440s
Iter:    1500,    Decode:    1.071,    encode:1.453,  time:196.908s
Iter:    2000,    Decode:    1.491,    encode:1.951,  time:260.481s

3、图片展示


总结

1)数据准备:准备MNIST集;
2)模型准备:定义GAN生成器模型,GAN判别器模型,损失函数和优化器;
3)数据训练:定义训练函数,实例化模型并训练,生成新的图片数据

相关文章:

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络 本次开启深度学习第十五回,基于Pytorch的神经网络编码器。本回分享的是GAN生成对抗网络。在本回中,通过minist数据集来分享如何建立一个GAN生成对抗网络。接下来给大家分享具体思路。 本…...

gitlab如何查看分支的创建时间

在 GitLab 上查看分支创建时间,常规的界面不会直接显示,但可以通过以下几种方法查到准确时间: 方法一:通过 GitLab Web 界面查看首次提交时间(近似) 打开你的项目仓库。点击左侧的「Repository&#xff08…...

centos时间不正确解决

检查当前系统时间 date如果时间明显不正确,可以进一步检查硬件时钟(BIOS 时间): bash复制代码hwclock --show同步时间(推荐方式) 为了确保系统时间准确,建议使用 NTP(网络时间协议…...

ubuntu启动 Google Chrome 时默认使用中文界面,设置一个永久的启动方式

方法 :通过桌面快捷方式设置 编辑 Chrome 的桌面快捷方式: 找到您的 Google Chrome 快捷方式文件。如果是通过菜单启动,通常会在以下路径找到与 Chrome 相关的 .desktop 文件: sudo vim /usr/share/applications/google-chrome.d…...

opencv腐蚀的操作过程

在腐蚀操作的详细流程中,遍历图像的过程如下: 初始化: 设置一个起始位置(通常从图像的左上角开始)。 准备好结构元素(structuring element),它是一个小的矩阵,大小通常是…...

Docker--Docker镜像原理

docker 是操作系统层的虚拟化,所以 docker 镜像的本质是在模拟操作系统。 联合文件系统(UnionFS) 联合文件系统(UnionFS) 是Docker镜像实现分层存储的核心技术,它通过将多个只读层(Image Laye…...

HL7消息编辑器的使用手册

REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件: Redis AssistantZooKeeper AssistantKafka AssistantRocketMQ AssistantRabbitMQ AssistantPulsar AssistantHBase AssistantNoSql AssistantEtcd AssistantGarnet Assistant 工业与物联网&#xff1…...

技术与情感交织的一生 (六)

目录 食色性也 Z 姐 Pizza “修罗场” 之战 大二 下 EP 混乱 危机 撤退 离别 初创 重逢 食色性也 美食、美器、美女。追求美好的事物是人的天性。八部众里,天众界:因修行,有美食而无美女;阿修罗界:因产力…...

AI搜索引擎的局限性

# 揭秘AI搜索引擎的局限性与深度爬取技巧 > 摘要:本文深入分析了基于关键词的AI搜索引擎局限性,探讨了深网内容难以被发现的原因,并提供了一系列实用技巧来提高信息获取的全面性。无论是开发者、研究人员还是普通用户,了解这些…...

IPD项目管理的“黄金三角“在2025年是否需要重构?

——技术革命下的组织进化与实践创新 一、时空背景:IPD黄金三角的底层逻辑与时代挑战 IPD(集成产品开发)管理体系自1998年引入中国以来,其"黄金三角"——跨职能团队协作、结构化流程体系、决策评审机制——始终是企业…...

Jarpress 开源项目重构公告

项目背景 经过长达三个月的技术攻坚,我们正式宣布完成对九年历史开源项目的全面重构升级!原项目基于JFina框架开发,现采用SpringBootMyBatis技术栈重构,正式更名为Jarpress。 架构升级 采用最小组件依赖实现,减少系…...

Redshift 2025.4.1 版本更新:多平台兼容性与功能修复

2025 年 4 月 10 日,Redshift 发布 2025.4.1 版本(2025.04),聚焦宿主软件兼容性提升与核心功能修复,具体更新如下: 各平台适配与优化 Maya/3ds Max/Blender:新增对 Maya 2026、3ds Max 2026、…...

使用crxjs插件编写浏览器扩展插件遇到的问题 Waiting for the extension service worker...

目前最新的vitejs/plugin-vue和crxjs/vite-plugin不兼容,在crxjs官网有写 修改插件版本如下: "devDependencies": {"crxjs/vite-plugin": "^1.0.14","vitejs/plugin-vue": "^2.3.4","vite"…...

数据库学习通期末复习一

🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...

数据分析实战案例:使用 Pandas 和 Matplotlib 进行居民用水

原创 IT小本本 IT小本本 2025年04月15日 18:31 北京 本文将使用 Matplotlib 及 Seaborn 进行数据可视化。探索如何清理数据、计算月度用水量并生成有价值的统计图表,以便更好地理解居民的用水情况。 数据处理与清理 读取 Excel 文件 首先,我们使用 pan…...

生态环境影响评价全解析

生态环境影响评价的原则、方法、工作程序、指标选择、参数计算、模型模拟、报告编制 一 :生态环境影响评价的基本程序 生态环境影响评价的涵义、生态影响的类型;生态环境影响评价的原则、流程、等级确定及工作范围。 图1 空间尺度上长江对中华鲟的累积…...

【Netty篇】Netty的线程模型

目录 一、Netty 线程模型是啥?二、Netty 线程模型有啥作用?三、Netty 线程模型解决了什么问题?四、如何使用 Netty 线程模型?五、Netty 线程模型的优缺点?六、总结 🌟我的其他文章也讲解的比较有趣&#x1…...

PyTorch实现权重衰退:从零实现与简洁实现

一、权重衰退原理 权重衰退(L2正则化)通过向损失函数添加权重的L2范数惩罚项,防止模型过拟合。其损失函数形式为: 二、从零开始实现 1.1 导入库与数据生成 %matplotlib inline import torch from torch import nn from d2l imp…...

Webflux声明式http客户端:Spring6原生HttpExchange实现,彻底摒弃feign

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

python的strip()函数用法; 字符串切片操作

python的strip()函数用法 目录 python的strip()函数用法代码整体功能概述代码详细解释1. `answer["output_text"]`2. `.strip()`3. `final_answer = ...`字符串切片操作:answer[start_index + len("Helpful Answer:"):].strip()整体功能概述代码详细解释1…...

多模态大语言模型arxiv论文略读(二十一)

EgoPlan-Bench: Benchmarking Multimodal Large Language Models for Human-Level Planning ➡️ 论文标题:EgoPlan-Bench: Benchmarking Multimodal Large Language Models for Human-Level Planning ➡️ 论文作者:Yi Chen, Yuying Ge, Yixiao Ge, Mi…...

MCP学习资料

Anthropic 官方:https://modelcontextprotocol.io/introduction 中文站:https://mcpcn.com/docs/examples/...

《Training Language Models to Self-Correct via Reinforcement Learning》全文翻译

《Training Language Models to Self-Correct via Reinforcement Learning》 通过强化学习训练语言模型实现自我修正 Aviral Kumar ∗ , 1 { }^{\\*, 1} ∗,1, Vincent Zhuang ∗ , 1 { }^{\\*, 1} ∗,1, Rishabh Agarwal ∗ , 1 { }^{\\*}, 1 ∗,1, Yi Su ∗ , 1 { }^…...

Rust 之五 所有权、.. 和 _ 语法、引用和切片、Vec<T>、HashMap<K, V>

概述 Rust 的基本语法对于从事底层 C/C 开发的人来说多少有些难以理解,虽然官方有详细的文档来介绍,不过内容是相当的多,看起来也费劲。本文通过将每个知识点简化为 一个 DEMO 每种特性各用一句话描述的形式来简化学习过程,提高学…...

如何运行Vue 3 + Tauri + Rust 前端项目

Vue 3 Tauri Rust 前端项目运行需要安装以下工具和依赖: 1. 基本开发工具 Node.js (建议 LTS 版本) - 用于运行前端构建工具 包含 npm 或 yarn 包管理器下载地址 Rust 工具链 - Tauri 基于 Rust 构建 通过 rustup 安装安装命令: curl --proto https --tlsv1.2 -…...

Nature图形复现—Origin绘制顶刊水准的多组柱状图

多组柱状图(也称分组柱状图或簇状柱状图)是一种数据可视化图形,用于同时展示多个组别在不同子类别下的数据对比。其核心特点是通过并列的柱子将不同组别的数据排列在同一子类别下,便于直观比较。 本期教程以2022年发表于Nature的文…...

空格键会提交表单吗?HTML与JavaScript中的行为解析

在网页开发中,理解用户交互细节对于提供流畅的用户体验至关重要。一个常见的问题是:空格键是否会触发表单提交?本文将通过一个简单的示例解释这一行为,并探讨如何使用HTML和JavaScript来定制这种交互。 示例概览 考虑以下HTML代…...

详解@JsonFormat和@DateTimeFormat注解:处理日期格式化的利器

在Java开发中,尤其是Spring和Spring Boot项目中,日期时间类型(如Date、LocalDateTime等)的格式化问题经常困扰开发者。例如,前端传递的日期字符串如何转换为后端对象?后端返回的日期对象如何按指定格式序列化?这时候,@JsonFormat和@DateTimeFormat两个注解可以轻松解决…...

python-各种文件(txt,xls,csv,sql,二进制文件)读写操作、文件类型转换、数据分析代码讲解

1.文件txt读写标准用法 1.1写入文件 要读取文件,首先得使用 open() 函数打开文件。 file open(file_path, moder, encodingNone) file_path:文件的路径,可以是绝对路径或者相对路径。mode:文件打开模式,r 代表以…...

Python(16)Python文件操作终极指南:安全读写与高效处理实践

目录 背景介绍一、文件操作基础架构1. 文件打开模式详解 二、文件读取全攻略1. 基础读取方法2. 大文件处理方案3. 定位与截断 三、文件写入进阶技巧1. 基础写入操作2. 缓冲控制与实时写入 四、with上下文原理剖析1. 上下文管理协议2. 多文件同时操作 五、综合实战案例1. 加密文…...

Maven相关名词及相关配置

1、相关名词 1 Project: 任何你想build的事物,maven都可以认为他们是工程,这些工程被定义为工程对象模型(POM:Project Object Model)一个工程可以依赖其他的工程,一个工程也可以有多个子工程构成。 2 POM: 就是xml文件…...

【自动化测试】如何获取cookie,跳过登录的简单操作

前言 🌟🌟本期讲解关于自动化测试函数相关知识介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话…...

登录校验:保障系统安全访问的关键技术解析

摘要:本文围绕Tlias智能学习辅助系统的登录校验功能展开,深入剖析了实现登录校验的必要性,介绍了会话技术和统一拦截技术等关键实现思路,并对Cookie、Session和令牌技术三种会话跟踪方案进行了详细对比,旨在为系统的安…...

数据库案例1--视图和索引

以下是一个关于数据库视图和索引的高级使用教程,结合实际案例进行讲解。我们将使用一个电商系统的数据库作为示例,展示如何创建和优化视图,以及如何通过索引提高查询性能。 案例背景 假设我们有一个电商系统,包含以下表&#xf…...

load_summarize_chain ,load_qa_chain 是什么

load_summarize_chain ,load_qa_chain 是什么 目录 load_summarize_chain ,load_qa_chain 是什么`load_summarize_chain``load_qa_chain`其他构建链的方式SequentialChain, TransformChainload_summarize_chain 和 load_qa_chain 都是 LangChain 库中的实用工具函数,用于快速构…...

SQL2API 核心理念:如何重构数据服务交付范式

在企业数据治理的漫长链条中,"数据服务交付" 始终是决定数据价值转化效率的关键一环。传统数据接口开发需经历需求沟通、SQL 编写、后端编码、接口测试、权限配置等多个环节,平均开发周期长达 7-10 天,且技术门槛高,导致…...

Proteus 仿真51单片机-串口收发小窥

51单片机 51单片机是一种经典的8位微控制器,广泛应用于各种嵌入式系统开发中。它具有结构简单、可靠性高、价格低廉等特点,深受工程师和电子爱好者的喜爱。 51单片机的核心是一个8位的CPU,能够执行多种指令,完成数据处理和逻辑运…...

信号与系统期中复习(第一章)

1、连续信号叠加的周期 2、离散信号的周期判定 离散信号只有当周期为整数的时候,才是周期信号 3、信号的时间变换 4、取样性质相关计算 5、系统的描述 6、线性系统的性质 7、信号的时间变换 8、基本概念 判断时不变系统的方法: 若f(t&#…...

bash的特性-常用的通配符

在Linux或Unix系统中,Bash作为最常用的命令行解释器之一,提供了多种通配符(wildcards)来帮助用户更高效地进行文件操作。这些通配符可以用来匹配多个文件名或路径名,极大地简化了批量处理任务。本文将详细介绍Bash中常…...

Android12 自定义系统服务

在Android中可以通过两种方式创建系统服务: 由SystemServer启动的系统服务,使用SystemServer线程资源,适合轻量级的服务,比如各种XMS服务;占用独立进程,在系统启动时,由init进程拉起,比如SurfaceFlinger;本文采用的是第一种方式。 自定义AssistantManagerService 参…...

安防监控视频管理平台EasyCVR助力建筑工地施工4G/5G远程视频监管方案

一、项目背景 随着城市建设的快速发展,房地产建筑工地的数量、规模与施工复杂性都在增加,高空作业、机械操作频繁,人员流动大,交叉作业多,安全风险剧增。施工企业和政府管理部门在施工现场管理上都面临难题。政府部门…...

如何针对游戏、金融行业定制CC攻击防护规则?

针对游戏和金融行业的高并发、实时交互及高价值特性,CC攻击防护需结合业务场景定制规则。以下是分行业的定制化防护方案: ​​一、游戏行业CC攻击防护规则​​ ​​1. 核心防护目标​​ 保障低延迟(毫秒级响应)防止作弊工具伪造…...

【redis】初识redis

初识redis Redis 是一种基于键值对(key-value) 的 NoSQL 的数据库,它与很多键值数据库不同, Redis 中的值可以是 string(字符串) 、hash(哈希)、list(链表)、…...

MJ PDF汉化版:功能强大,阅读无忧

在数字化时代,PDF 文件已成为我们日常生活和工作中不可或缺的一部分。无论是学习资料、工作报告还是电子书,PDF 格式因其兼容性和稳定性而被广泛使用。然而,对于许多中文用户来说,使用英文界面的 PDF 阅读器可能会带来不便。 今天…...

线代第二章矩阵第二课:矩阵的加法、减法、数乘

一、矩阵的加法、减法 加法 减法 二、矩阵的数乘 规律: (1)K(AB)KAKB (2)(KL)AKALA (3)k(LA)(kL)AL(kA) (4)1*A A ; (-1)*A -A 观看笔记来源: 《线性代数…...

Python实例题:Python自动获取海量IP工具

目录 Python实例题 题目 实现思路 代码实现 代码解释 get_proxy_list 函数: check_proxy_validity 函数: save_valid_ips 函数: 主程序: 运行思路 注意事项 Python实例题 题目 Python自动获取海量IP工具 实现思路 …...

Vue el-from的el-form-item v-for循环表单如何校验rules(一)

实际业务需求场景: 新增或编辑页面(基础信息表单,一个数据列表的表单),数据列表里面的表单数是动态添加的。数据可新增、可删除,在表单保存前,常常需要做表单必填项的校验,校验通过以…...

AI 边缘计算盒子:开启智能物联新时代

一、什么是 AI 边缘计算盒子 AI 边缘计算盒子是一种集成了高性能芯片、AI 算法和数据处理能力的硬件设备。它部署在数据源的边缘侧,如工厂、商场、交通路口等,能够在本地进行数据采集、预处理、分析和决策,而无需将所有数据上传到云端。这种…...

【AGI】MCP生态的“飞轮效应”

【AGI】MCP生态的“飞轮效应” (一)打通AI代理外部交互的“最后一公里”1. AI代理的核心挑战:可靠的外部服务交互2. MCP的解决方案:结构化交互协议3. 案例对比:Figma设计修改任务4. 行业影响:从实验性技术到…...

【无标题】win7和win11双系统共存

一、背景: .本人自有戴尔E6440型老款笔记本电脑一台。500g固态硬盘,12g内存,硬盘共分了两个分区。由于本人想实现Win11系统和win七双系统共存,和可以分别加载,今晚上折腾了几个小时终于搞定了!现把经验总结…...