神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)
🧠 神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)
哈喽!各位AI探索者们!👋 上期我们把数学"怪兽"给驯服了,是不是感觉还挺轻松的?今天我们要进入更刺激的环节——揭开神经网络的神秘面纱!🎭
很多人觉得神经网络很高深,其实它就像乐高积木一样,从最简单的"神经元"开始,一层层搭建起来。今天superior哥就带你从零开始,看看这个模仿大脑的"人工智能"是怎么工作的!🧩
🤔 为什么叫"神经"网络?跟我们的大脑有啥关系?
想象一下,你的大脑里有1000亿个神经元在疯狂工作!🤯 每当你看到一只猫咪时:
- 👁️ 眼睛接收光信号
- ⚡ 视神经把信号传给大脑
- 🧠 各种神经元层层处理:边缘检测→形状识别→特征组合
- 💡 最后"叮"一声:“这是只猫!”
人工神经网络就是受这个过程启发,试图模仿大脑的工作方式。当然,现在的AI比我们的大脑还差得远,但已经足够做很多厉害的事情了!
🔍 单个神经元:神经网络的"乐高积木"
神经元的四大组件
想象一个神经元就是一个超级聪明的小决策者,它有四个关键部分:
- 📥 输入端口:接收来自外界或其他神经元的信息
- ⚖️ 权重系统:决定每个输入有多重要
- 🧮 计算中心:把所有输入加权求和
- 🚀 激活器:根据计算结果决定是否"兴奋"并输出信号
🏃♂️ 生活例子:要不要去跑步的神经元
让我们用一个接地气的例子来理解神经元是怎么工作的:
设定场景: 你的大脑里有个专门负责"决定是否去跑步"的神经元🏃♂️
三个输入因素:
- 🌤️ 天气情况(输入1)
- ⏰ 可用时间(输入2)
- 💪 身体状态(输入3)
权重设置(重要性排序):
- 天气权重 = 0.3(有点重要)
- 时间权重 = 0.5(比较重要)
- 身体权重 = 0.8(最重要!)
今天的具体情况:
- 天气不错:打分 0.7
- 时间充足:打分 0.9
- 有点累:打分 0.4
神经元开始计算:
总分 = 0.7×0.3 + 0.9×0.5 + 0.4×0.8= 0.21 + 0.45 + 0.32 = 0.98
激活函数判断: 如果总分 > 0.5,就去跑步!
结果:0.98 > 0.5 ✅ → 决定:去跑步!
这就是一个神经元的完整工作流程!🎉
🎛️ 激活函数:神经元的"性格设定"
如果神经网络只会简单的加减乘除,那它就是个高级计算器,没啥智能可言。激活函数就是给神经元装上"性格"的关键!
常见的激活函数"性格"类型:
🎚️ Sigmoid:优雅的淑女型
- 特点:输出永远在0到1之间,像个温和的淑女
- 性格:不管输入多极端,输出都很"温柔"
- 生活类比:就像一个很有修养的人,不管多生气也不会大发雷霆
⚡ ReLU:简单粗暴型
- 特点:负数直接砍成0,正数原样保留
- 性格:非黑即白,要么不响应,要么全力响应
- 生活类比:像个直性子的东北大哥,“行就是行,不行就拉倒!”
🎭 Tanh:情绪丰富型
- 特点:输出在-1到1之间,可以表达"负面情绪"
- 性格:比Sigmoid更有表现力,能表达"不喜欢"
- 生活类比:像个情感丰富的艺术家,爱憎分明
在实际项目中,ReLU是最受欢迎的"员工"——简单粗暴但效果好!💪
🏗️ 从单个神经元到神经网络:搭建AI"大脑"
单个神经元就像一个只会做简单判断的小朋友,但当我们把很多个这样的"小朋友"组织起来,就能形成超强的团队!
🏢 神经网络的"公司架构"
想象神经网络就是一家有层级的公司:
- 📨 输入层(前台):接收原始数据,就像公司前台接待客户
- 🏭 隐藏层(各部门):处理信息的中间层,可以有很多层
- 📋 输出层(管理层):做最终决策
- 输出层:产生最终结果
🎯 一个具体例子:识别手写数字的神经网络
让我们用识别手写数字(0-9)的例子来看看多层网络是怎么工作的:
输入层: 784个神经元(28×28像素的图片)
- 每个像素的灰度值(0-255)
隐藏层1: 128个神经元
- 学习识别边缘、线条等基本特征
隐藏层2: 64个神经元
- 组合基本特征,识别数字的局部形状
输出层: 10个神经元
- 分别对应数字0-9的概率
🔄 前向传播:信息在网络中的"接力赛"
前向传播就像一场信息传递的接力赛!🏃♂️➡️🏃♀️➡️🏃♂️
🎮 用游戏的方式理解前向传播
想象你在玩一个"传话游戏":
-
第一棒(输入层):小明看到一张猫的照片,描述给小红:“我看到毛茸茸的东西,有尖耳朵…”
-
第二棒(隐藏层1):小红听了小明的描述,加上自己的理解,告诉小刚:“听起来像是小动物,可能有四条腿…”
-
第三棒(隐藏层2):小刚综合前面的信息,告诉小李:“应该是宠物,很可能是猫或狗…”
-
最后一棒(输出层):小李做最终判断:“80%确定是猫!”
这就是前向传播的过程!每一层都在前一层的基础上,添加自己的"理解"和"判断"!
⚡ 数学版本(别怕,很简单!)
# 前向传播的简化版本
def forward_pass(input_data):# 第一层:输入 × 权重 + 偏置,然后激活layer1_output = activate(input_data × weights1 + bias1)# 第二层:第一层输出 × 权重 + 偏置,然后激活 layer2_output = activate(layer1_output × weights2 + bias2)# 输出层:最终预测final_output = activate(layer2_output × weights_final + bias_final)return final_output
就像流水线一样:原材料→半成品→成品!🏭
🔙 反向传播:神经网络的"反思"机制
🎯 篮球教练的智慧
想象你在学投篮🏀:
- 你投篮 → 球偏左了
- 教练分析 → “手腕角度有问题”
- 你调整 → 下次投篮时调整手腕
- 再次投篮 → 更准了!
反向传播就是神经网络的"教练"!它告诉每个神经元怎么调整,让整个网络表现更好。
🧠 反向传播的工作流程
- 🎯 前向预测:网络给出预测结果
- 😱 发现错误:计算预测与真实答案的差距
- 🔍 分析责任:找出每个神经元对错误的"贡献"
- 🔧 调整权重:让每个神经元都变得"更聪明"
- 🔄 重复练习:千万次训练后,网络变成专家!
📊 梯度下降:找到最佳"配方"
还记得我们之前说的"做菜找最佳配方"的例子吗?🍳
神经网络训练就像调配一道菜:
- 权重 = 各种调料的用量
- 损失函数 = 菜的"难吃程度"
- 梯度 = 每种调料应该增加还是减少
- 学习率 = 每次调整的幅度
# 梯度下降的伪代码
while 菜还不够好吃:尝一口菜,计算难吃程度for 每种调料:if 增加这种调料能让菜更好吃:增加一点点这种调料else:减少一点点这种调料重新做菜,再尝一口
经过成千上万次的调整,AI大厨就能做出完美的菜了!👨🍳✨
🛠️ 实战时间:搭建你的第一个"AI大脑"
准备好了吗?现在我们要动手搭建一个真正的神经网络!🔨 这个网络的任务是预测一个人是否会喜欢某部电影。
🎬 我们的任务:AI电影推荐专家
输入特征:
- 🎯 动作场景多少(0-10分)
- 💕 浪漫元素多少(0-10分)
- 😂 喜剧元素多少(0-10分)
输出结果:
- 📊 这个人喜欢这部电影的概率(0-1之间)
💻 代码实现:从零开始的神经网络
import numpy as np
import matplotlib.pyplot as pltclass MovieRecommenderAI:"""电影推荐AI - 你的第一个神经网络!"""def __init__(self):print("🤖 正在初始化AI大脑...")# 随机初始化权重(给AI一个"婴儿大脑")self.weights_input_hidden = np.random.rand(3, 4) # 3个输入 → 4个隐藏神经元self.weights_hidden_output = np.random.rand(4, 1) # 4个隐藏 → 1个输出# 偏置(每个神经元的"个性")self.bias_hidden = np.random.rand(1, 4)self.bias_output = np.random.rand(1, 1)print("✅ AI大脑初始化完成!")def sigmoid(self, x):"""Sigmoid激活函数 - 给神经元装上'优雅淑女'性格"""return 1 / (1 + np.exp(-np.clip(x, -250, 250))) # 防止数值溢出def sigmoid_derivative(self, x):"""Sigmoid的导数 - 用于反向传播的魔法"""return x * (1 - x)def forward_think(self, movie_features):"""前向传播 - AI的思考过程"""print(f"🧠 AI正在分析电影特征: {movie_features}")# 第一层思考:从基础特征到抽象概念self.hidden_input = np.dot(movie_features, self.weights_input_hidden) + self.bias_hiddenself.hidden_output = self.sigmoid(self.hidden_input)print(f"💭 隐藏层思考结果: {self.hidden_output.round(3)}")# 第二层思考:做出最终决策self.output_input = np.dot(self.hidden_output, self.weights_hidden_output) + self.bias_outputself.predicted_preference = self.sigmoid(self.output_input)print(f"🎯 AI预测喜好度: {self.predicted_preference[0][0]:.3f}")return self.predicted_preferencedef learn_from_mistake(self, movie_features, actual_preference, learning_rate=0.5):"""反向传播 - AI从错误中学习"""# 前向思考predicted = self.forward_think(movie_features)# 计算错误程度error = actual_preference - predictedprint(f"😅 预测误差: {error[0][0]:.3f}")if abs(error[0][0]) < 0.01:print("🎉 预测很准确,AI很开心!")else:print("🤔 AI在反思哪里出错了...")# 反向传播:调整权重# 输出层的调整output_delta = error * self.sigmoid_derivative(predicted)hidden_error = output_delta.dot(self.weights_hidden_output.T)hidden_delta = hidden_error * self.sigmoid_derivative(self.hidden_output)# 更新权重(AI变聪明的过程)self.weights_hidden_output += self.hidden_output.T.dot(output_delta) * learning_rateself.weights_input_hidden += movie_features.T.dot(hidden_delta) * learning_rateself.bias_output += np.sum(output_delta, axis=0, keepdims=True) * learning_rateself.bias_hidden += np.sum(hidden_delta, axis=0, keepdims=True) * learning_rateprint("🧠 AI大脑已更新,变得更聪明了!")return abs(error[0][0])def train_ai_brain(self, training_data, training_labels, epochs=1000):"""训练AI大脑 - 让AI变成电影专家"""print(f"📚 开始训练AI,准备学习 {epochs} 轮...")errors = []for epoch in range(epochs):total_error = 0# 让AI看每一个训练样本for i in range(len(training_data)):error = self.learn_from_mistake(training_data[i:i+1], training_labels[i:i+1])total_error += erroravg_error = total_error / len(training_data)errors.append(avg_error)# 每100轮汇报一次进度if epoch % 100 == 0:print(f"📈 第 {epoch} 轮训练,平均误差: {avg_error:.4f}")print("🎓 AI训练完成,现在是电影专家了!")return errorsdef recommend_movie(self, movie_features):"""给用户推荐电影"""preference = self.forward_think(movie_features)if preference[0][0] > 0.7:return f"🎬 强烈推荐!AI认为你有 {preference[0][0]*100:.1f}% 的概率会喜欢这部电影!"elif preference[0][0] > 0.5:return f"👍 还不错!AI认为你有 {preference[0][0]*100:.1f}% 的概率会喜欢。"else:return f"😐 可能不太适合你,只有 {preference[0][0]*100:.1f}% 的概率会喜欢。"# 创建我们的AI电影专家
print("🎬 欢迎来到AI电影推荐系统!")
ai_critic = MovieRecommenderAI()# 准备训练数据(已知某个人的电影偏好)
print("\n📊 准备训练数据...")
training_movies = np.array([[8, 2, 4], # 动作片:《速度与激情》[2, 9, 3], # 爱情片:《泰坦尼克号》[5, 5, 8], # 喜剧片:《憨豆先生》[9, 1, 2], # 纯动作:《敢死队》[1, 8, 1], # 纯爱情:《恋恋笔记本》[3, 3, 9], # 纯喜剧:《大话西游》[7, 6, 5], # 综合片:《钢铁侠》[0, 2, 1] # 无聊片:《文艺片》
])# 这个人的真实喜好(喜欢动作和喜剧,不喜欢纯爱情)
true_preferences = np.array([[0.9], # 喜欢动作片[0.2], # 不喜欢爱情片[0.8], # 喜欢喜剧片[0.95], # 超喜欢纯动作[0.1], # 不喜欢纯爱情[0.85], # 喜欢纯喜剧[0.75], # 喜欢综合片[0.05] # 讨厌无聊片
])# 开始训练AI
print("\n🎓 开始训练AI大脑...")
training_errors = ai_critic.train_ai_brain(training_movies, true_preferences, epochs=500)# 测试AI的推荐能力
print("\n🎯 测试AI推荐能力...")
test_movies = [[8, 3, 6], # 动作喜剧:《功夫熊猫》[1, 9, 2], # 浪漫片:《我的野蛮女友》[6, 4, 7] # 平衡片:《阿凡达》
]test_names = ["《功夫熊猫》", "《我的野蛮女友》", "《阿凡达》"]for i, movie in enumerate(test_movies):print(f"\n🎬 测试电影: {test_names[i]}")print(f"📋 特征: 动作{movie[0]}, 浪漫{movie[1]}, 喜剧{movie[2]}")recommendation = ai_critic.recommend_movie(np.array([movie]))print(f"🤖 {recommendation}")# 可视化训练过程
plt.figure(figsize=(10, 6))
plt.plot(training_errors)
plt.title('🧠 AI学习进度 - 误差随时间变化')
plt.xlabel('训练轮数')
plt.ylabel('平均误差')
plt.grid(True)
plt.show()print("\n🎉 恭喜!你已经成功创建了第一个神经网络!")
🎯 运行结果解析
当你运行这个代码时,你会看到:
- 🤖 AI初始化:随机权重开始,就像婴儿的大脑
- 📚 学习过程:AI不断从错误中学习,调整权重
- 📈 进步曲线:误差逐渐减小,AI越来越聪明
- 🎬 推荐结果:训练后的AI能准确预测电影偏好
这就是神经网络的神奇之处:从随机噪音到智能专家,只需要数据和训练! ✨## 🏗️ 深度神经网络:AI的"摩天大楼"
🏢 为什么要"盖高楼"?
还记得我们之前的电影推荐AI吗?它只有1个隐藏层,就像一个平房🏠。现在我们要建造AI界的"摩天大楼"——深度神经网络!🏗️
更多层 = 更强大的理解能力
想象AI识别一张猫的照片:
- 第1层(边缘检测员):🔍 “我看到了一些线条和边缘”
- 第2层(形状识别员):👁️ “这些边缘组成了眼睛、耳朵的形状”
- 第3层(特征组合员):🧩 “眼睛+耳朵+胡须 = 看起来像动物的脸”
- 第4层(专家判断员):🎯 “99%确定这是一只猫!”
每一层都在前一层的基础上,理解更抽象、更复杂的概念!
📈 深度的威力:从简单到复杂
浅层网络(1-2层):只能学简单模式
↓
中层网络(3-5层):能学复杂关系
↓
深层网络(6-100+层):能理解高度抽象的概念
举个例子:
- 识别数字:浅层网络就够了
- 识别人脸:需要中层网络
- 理解语言:需要深层网络
- 自动驾驶:需要超深层网络
🚨 深度网络的"成长烦恼"
虽然深度网络很强大,但也有一些"青春期烦恼"需要解决:
😵 过拟合:死记硬背的"书呆子"
问题: AI变成了只会死记硬背的学生
表现:
- 训练数据:100分 🎯
- 测试数据:30分 😱
解决方案:
🎲 Dropout:随机"请假"制度
# 训练时随机让50%的神经元"请假"
# 就像团队合作,不能只依赖某几个人def dropout_layer(x, drop_rate=0.5):if training_mode:mask = np.random.binomial(1, 1-drop_rate, x.shape)return x * mask / (1-drop_rate)else:return x # 测试时所有人都上班
📏 正则化:给AI立"规矩"
# L2正则化:不允许权重太极端
loss = original_loss + λ * sum(weight²)
# 就像告诉AI:"别太偏激,要平衡!"
⚡ 梯度消失:信息传递的"电话游戏"
问题: 传话传到最后完全变味了
想象一个1000人的传话游戏:
- 第1个人:🗣️ “今天天气真好”
- 第500个人:🤔 “今天…什么?”
- 第1000个人:😵 “啥?有人说话吗?”
在深层网络中,梯度在反向传播时会越来越小,最终接近0,前面的层学不到东西!
解决方案:
🛣️ 残差连接:修建"高速公路"
# ResNet的核心思想:给信息修条高速路
def residual_block(x):# 常规路线(可能堵车)processed = neural_network_layers(x)# 高速公路(直达)shortcut = x# 两条路的结果相加output = processed + shortcutreturn output
🎯 BatchNorm:给每层装个"调节器"
# 批量归一化:让每层的输入都很"正常"
def batch_normalization(x):mean = np.mean(x, axis=0)var = np.var(x, axis=0)normalized = (x - mean) / np.sqrt(var + epsilon)return normalized
🎨 网络架构设计:AI的"建筑艺术"
设计神经网络就像设计建筑,既要科学又要艺术!🎨
🧩 关键设计决策
1. 🏗️ 网络深度:要盖几层楼?
- 浅网络(1-3层):适合简单任务,像盖平房
- 中等网络(4-10层):适合一般任务,像盖小高楼
- 深网络(10-100+层):适合复杂任务,像盖摩天大楼
2. 📏 网络宽度:每层要多少神经元?
- 太窄:学习能力不足,像独木桥
- 太宽:容易过拟合,像铺张浪费
- 刚好:恰到好处,像黄金比例
3. 🎭 激活函数:给神经元什么"性格"?
- ReLU:简单粗暴,适合大部分情况
- Sigmoid:温和优雅,适合概率输出
- Tanh:情感丰富,适合需要负值的场景
🎯 经验法则(AI建筑师的"施工指南")
- 先简单后复杂:从小房子开始,再盖大楼
- 数据决定规模:数据多就盖大楼,数据少就盖平房
- 性能优先:ReLU + BatchNorm + Dropout 是经典组合
- 多试多调:建筑师也要反复修改图纸!
🎉 总结:神经网络的魔法与现实
🪄 神经网络的神奇之处
- 🧠 模仿大脑:受生物神经元启发,但已经超越生物的局限
- 📚 自动学习:不需要编程每个细节,从数据中自动学习模式
- 🎯 广泛适用:从图像识别到语言翻译,几乎无所不能
- 🚀 持续进化:每天都有新的技术突破
🌟 关键概念回顾
- 神经元:网络的基本单位,就像乐高积木 🧩
- 权重:决定信息重要性的参数 ⚖️
- 激活函数:给神经元装上"性格" 🎭
- 前向传播:信息从输入到输出的"流水线" 🏭
- 反向传播:从错误中学习的"反思机制" 🔄
- 深度:层数越多,理解越深刻 🏗️
🔮 展望未来
神经网络虽然强大,但仍在快速发展:
- 更聪明的架构:Transformer、Attention机制
- 更高效的训练:联邦学习、迁移学习
- 更广泛的应用:医疗、教育、艺术创作
🎯 下期预告:CNN的视觉革命
下一期我们要学习CNN(卷积神经网络),看看AI是如何获得"超级视力"的!
预告内容:
- 📸 为什么普通神经网络看不懂图片?
- 🔍 卷积操作:AI的"魔法滤镜"
- 🏊♂️ 池化操作:信息压缩大师
- 🎯 实战:用CNN识别手写数字
记得点赞收藏关注三连!我们下期见!👋
💡 superior哥的神经网络小贴士:神经网络就像搭积木,从最简单的神经元开始,一层层搭建起来。虽然数学看起来复杂,但核心思想很简单:通过大量的试错来学习!不要被公式吓到,重在理解思想!加油!🧠✨
相关文章:
神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)
🧠 神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期) 哈喽!各位AI探索者们!👋 上期我们把数学"怪兽"给驯服了,是不是感觉还挺轻松的?今天我们要进…...

UVa12298 Super Joker II
UVa12298 Super Joker II 题目链接题意输入格式输出格式 分析AC 代码 题目链接 UVa12298 Super Joker II 题意 有一副超级扑克,包含无数张牌。对于每个正合数p,恰好有4张牌:黑桃p,红桃p,梅花p和方块p(分别…...
面向对象系统中对象交互的架构设计哲学
更多精彩请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎-CSDN博客 一、对象交互的本质与设计矛盾 在面向对象范式(OOP)中,对象间的交互实质上是软件组件解耦与功能复用的动态平衡过程。每个对象作为独立的计算单元,既需要维护…...

【网络安全】SRC漏洞挖掘思路/手法分享
文章目录 Tip1Tip2Tip3Tip4Tip5Tip6Tip7Tip8Tip9Tip10Tip11Tip12Tip13Tip14Tip15Tip16Tip17Tip18Tip19Tip20Tip21Tip22Tip23Tip24Tip25Tip26Tip27Tip28Tip29Tip30Tip1 “复制该主机所有 URL”:包含该主机上的所有接口等资源。 “复制此主机里的链接”:包括该主机加载的第三…...

【AFW+GRU(CNN+RNN)】Deepfakes Detection with Automatic Face Weighting
文章目录 Deepfakes Detection with Automatic Face Weighting背景pointsDeepfake检测挑战数据集方法人脸检测面部特征提取自动人脸加权门控循环单元训练流程提升网络测试时间增强实验结果Deepfakes Detection with Automatic Face Weighting 会议/期刊:CVPRW 2020 作者: …...
【面试】音视频面试
C内存模型 H.265(HEVC)相比H.264(AVC)的核心优势 1. 压缩效率显著提升 在相同画质下,H.265的码率比H.264降低约40-50%,尤其适用于4K/8K超高清场景。通过**更大的编码单元(CTU,最大…...

性能优化 - 案例篇:缓冲区
文章目录 Pre1. 引言2. 缓冲概念与类比3. Java I/O 中的缓冲实现3.1 FileReader vs BufferedReader:装饰者模式设计3.2 BufferedInputStream 源码剖析3.2.1 缓冲区大小的权衡与默认值 4. 异步日志中的缓冲:Logback 异步日志原理与配置要点4.1 Logback 异…...
Java编程之建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。这种模式允许你分步骤构建一个复杂对象,并且可以在构建过程中进行不同的配置。 模式的核…...
基于TI DSP控制的光伏逆变器最大功率跟踪mppt
基于TI DSP(如TMS320F28335)控制的光伏逆变器最大功率跟踪(MPPT)程序通常涉及以下几个关键部分:硬件电路设计、MPPT算法实现、以及DSP的编程。以下是基于TI DSP的光伏逆变器MPPT程序的一个示例,主要采用扰动…...
Python玩转自动驾驶仿真数据生成:打造你的智能“路测场”
Python玩转自动驾驶仿真数据生成:打造你的智能“路测场” 说到自动驾驶,很多人第一时间想到的是那些造车新势力、激光雷达、传感器、深度学习模型……确实,这些都是自动驾驶的核心硬核。但我今天想和你聊聊一个“幕后功臣”——仿真数据生成。没错,自动驾驶离不开大数据,更…...
从测试角度看待CI/CD,敏捷开发
什么是敏捷开发? 是在高强度反馈的情况下,短周期,不断的迭代产品,满足用户需求,抢占更多的市场 敏捷开发是什么? 是一种产品快速迭代的情况下,降低出错的概率,具体会落实到公司的…...
agent mode 代理模式,整体要求,系统要求, 系统指令
1. 起因, 目的: 我发现很多时候,我在重复我的要求。很烦。决定把一些过程记录下来,提取一下。 2. 先看效果 无。 3. 过程: 要求: 这2个文件,是我与 AI 聊天的一些过程记录。 请阅读这2个文件,帮我提取出一些共同…...

ES101系列07 | 分布式系统和分页
本篇文章主要讲解 ElasticSearch 中分布式系统的概念,包括节点、分片和并发控制等,同时还会提到分页遍历和深度遍历问题的解决方案。 节点 节点是一个 ElasticSearch 示例 其本质就是一个 Java 进程一个机器上可以运行多个示例但生产环境推荐只运行一个…...

Spring AI Advisor机制
Spring AI Advisors 是 Spring AI 框架中用于拦截和增强 AI 交互的核心组件,其设计灵感类似于 WebFilter,通过链式调用实现对请求和响应的处理5。以下是关键特性与实现细节: 核心功能 1. 请求/响应拦截 通过 AroundAdvisor 接口动态修…...

Vue3 + Vite:我的 Qiankun 微前端主子应用实践指南
前言 实践文章指南 vue微前端qiankun框架学习到项目实战,基座登录动态菜单及权限控制>>>>实战指南:Vue 2基座 Vue 3 Vite TypeScript微前端架构实现动态菜单与登录共享>>>>构建安全的Vue前后端分离架构:利用长Token与短Tok…...
使用ArcPy生成地图系列
设置地图布局 在生成地图系列之前,需要先设置地图布局。这包括定义地图的页面大小、地图框的位置和大小、标题、图例等元素。ArcPy提供了arcpy.mp.ArcGISProject方法来加载ArcGIS Pro项目文件(.aprx),并操作其中的地图布局。 Py…...

日语输入法怎么使用罗马字布局怎么安装日语输入法
今天帮客户安装日语输入法的时候遇到了一个纠结半天的问题,客户一直反馈说这个输入法不对,并不是他要的功能。他只需要罗马字的布局,而不是打出来字的假名。 片假名、平假名,就好像英文26个字母,用于组成日文单词。两…...
U盘挂载Linux
在 只能使用 Telnet 的情况下,如果希望通过 U盘 传输文件到 Linux 系统,可以按照以下步骤操作: 📌 前提条件 U盘已插入 Linux 主机的 USB 接口。Linux 主机支持自动挂载 U盘(大多数现代发行版默认支持)。T…...

数据结构:栈(Stack)和堆(Heap)
目录 内存(Memory)基础 程序是如何利用主存的? 🎯 静态内存分配 vs 动态内存分配 栈(stack) 程序执行过程与栈帧变化 堆(Heap) 程序运行时的主存布局 内存(Memo…...

用 Vue 做一个轻量离线的“待办清单 + 情绪打卡”小工具
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
3D Gaussian splatting 05: 代码阅读-训练整体流程
目录 3D Gaussian splatting 01: 环境搭建3D Gaussian splatting 02: 快速评估3D Gaussian splatting 03: 用户数据训练和结果查看3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云3D Gaussian splatting 05: 代码阅读-训练整体流程3D Gaussian splatting 06: 代码…...
Linux——计算机网络基础
一、网络 1.概念 由若干结点和连接结点的链路组成。结点可以是计算机,交换机,路由器等。 2.互联网 多个网络连接起来就是互联网。 因特网:最大的互联网。 二、IP地址和MAC地址 1.IP地址 (1)概念 IP地址是给因…...
第2章_Excel_知识点笔记
来自: 第2章_Excel_知识点笔记 原笔记 Excel 知识点总结(第2章) Excel_2.1 知识点 基础操作 状态栏:快速查看计数/求和等数据(右键可配置)。筛选(CtrlShiftL):按条件显…...
缩量和放量指的是什么?
在股票市场中,“缩量”和“放量”是描述成交量变化的两个核心概念,它们反映了市场参与者的情绪和资金动向,对判断股价趋势有重要参考价值。以下是具体解析: 📉 一、缩量(成交量明显减少) 1. 定…...

PostgreSQL数据库备份
文章目录 pg_dump 和 pg_dumpall使用 pg_dump 备份单个数据库示例 使用 pg_dumpall 备份整个数据库集群基本用法 恢复备份恢复 pg_dump 备份恢复 pg_dumpall 备份 Tips pg_dump 和 pg_dumpall 在 PostgreSQL 中,pg_dump 和 pg_dumpall 是两个常用的备份工具&#x…...
企业级Spring MVC高级主题与实用技术讲解
企业级Spring MVC高级主题与实用技术讲解 本手册旨在为具备Spring MVC基础的初学者,系统地讲解企业级应用开发中常用的高级主题和实用技术,涵盖RESTful API、统一异常处理、拦截器、文件处理、国际化、前端集成及Spring Security基础。内容结合JavaConf…...

js-day7
JS学习之旅-day7 1.事件流1.1 事件流与两个阶段说明1.2 事件捕获1.3 事件冒泡1.4 阻止1.5 解绑事件 2. 事件委托3. 其他事件3.1 页面加载事件3.2 页面滚动事件3.3 页面尺寸事件 4. 元素尺寸与位置 1.事件流 1.1 事件流与两个阶段说明 事件流指的是事件完整执行过程中的流动路…...
【算法训练营Day04】链表part2
文章目录 两两交换链表中的节点删除链表的倒数第 N 个结点链表相交环形链表 II链表总结 两两交换链表中的节点 题目链接:24. 两两交换链表中的节点 算法逻辑: 添加一个虚拟头节点初始化一个交换指针,代表每次交换指针的后两个节点࿰…...
【ROS2】各种相关概念汇总解释
包含概念 ROS2自带的标准接口ament_cmake是什么? 标准接口 似乎没有一个确定的名称,就是通俗的叫做“ROS2自带的消息接口” 这些接口存放在 /opt/ros/humble/share 路径下 ament_cmake 是 ROS 2 中基于 CMake 的构建系统 系统越复杂,构…...

解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)
1. 引言 在上一篇文章《使用Vditor将Markdown文档渲染成网页(ViteJSVditor)》中,详细介绍了通过Vditor将Markdown格式文档渲染成Web网页的过程,并且实现了图片格式居中以及图片源更换的功能。不过,笔者发现在加载这个渲染Markdown网页的时候…...