<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Junhao Zhou的博客</title><link>https://JunhaoZhou1222.github.io/JunhaoZhou.github.io</link><description>想要学会机器学习，推荐算法， AI Agent</description><copyright>Junhao Zhou的博客</copyright><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><image><url>https://avatars.githubusercontent.com/u/190544978?v=4&amp;size=64</url><title>avatar</title><link>https://JunhaoZhou1222.github.io/JunhaoZhou.github.io</link></image><lastBuildDate>Thu, 19 Mar 2026 20:54:53 +0000</lastBuildDate><managingEditor>Junhao Zhou的博客</managingEditor><ttl>60</ttl><webMaster>Junhao Zhou的博客</webMaster><item><title>数据增强 Data Augumentation</title><link>https://JunhaoZhou1222.github.io/JunhaoZhou.github.io/post/shu-ju-zeng-qiang-%20Data%20Augumentation.html</link><description>数据增强是对数据进行不同的变化去生成同一张图片但是不同版本的样本

```python
import torchvision.transforms as transform



data_transform = {
    'train':
        transform.Compose([
        transform.Resize([128,128]), 
        transform.RandomRotation(45), #随机旋转（-45 - 45度）
        transform.CenterCrop(64), #从中心开始裁剪
        transform.RandomHorizontalFlip(p=0.5), #水平翻转，选择一个概率
        transform.RandomVerticalFlip(p=0.5), #垂直翻转， 选择一个概率
        transform.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1), #亮度， 对比度， 饱和度， 色相
        transform.RandomGrayscale(p=0.025), #概率转换为灰度
        transform.ToTensor(),
        transform.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) #均值， 标准差
    ]),
    'valid':
        transform.Compose([
        transform.Resize([64,64]),
        transform.ToTensor(),
        transform.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])
}
```。</description><guid isPermaLink="true">https://JunhaoZhou1222.github.io/JunhaoZhou.github.io/post/shu-ju-zeng-qiang-%20Data%20Augumentation.html</guid><pubDate>Thu, 19 Mar 2026 20:52:12 +0000</pubDate></item><item><title>视觉神经网络 Pytorch CNN NN</title><link>https://JunhaoZhou1222.github.io/JunhaoZhou.github.io/post/shi-jue-shen-jing-wang-luo-%20Pytorch%20CNN%20NN.html</link><description># 数据处理

```python
import torch
from torchvision import datasets, transforms
import numpy as np
from torch.utils.data import DataLoader

#用 MNIST 内置数据集
input_size = 28 #图片尺寸
num_classes = 10 #类别数量
num_epoch = 3 #训练轮数
batch_size = 64 #每批图片数量

device= 'cuda' if torch.cuda.is_available() else 'cpu'
print(device)

train_datasets = datasets.MNIST(   #下载加载训练集
    root = './data',
    train = True,
    download = True,
    transform = transforms.ToTensor()
)

test_datasets = datasets.MNIST(  #下载加载测试集
    root = './data',
    train = False,
    download = True,
    transform = transforms.ToTensor()
)

train_dataloader = DataLoader(  #每次取一个batch
    dataset=train_datasets,
    batch_size=64,
    shuffle=True
)

test_dataloader = DataLoader(  #每次取一个batch
    dataset=test_datasets,
    batch_size=64,
    shuffle=True
)
```

# CNN模型框架

```python
class CNN(nn.Module):
    def __init__(self,num_classes):
        super(CNN,self).__init__()
        self.conv1 = nn.Sequential(         #input: 1*28*28
            nn.Conv2d(
            in_channels = 1,
            out_channels = 64,
            kernel_size = 3,
            stride = 1,
            padding = 1),                   # if want same width and length of this image after Conv2d, padding=(kernel_size-1)/2 if stride=1
                                            #output: 64*28*28
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2)    #output after maxpool: 64*14*14
        )

        self.conv2 = nn.Sequential(
            nn.Conv2d(64,128,3,1,1),        #input: 64*14*14
            nn.ReLU(),                      #output: 128*14*14
            nn.MaxPool2d(kernel_size=2)    #output after maxpool: 128*7*7
        )

        self.conv3 = nn.Sequential(
            nn.Conv2d(128,256,3,1,1),       #input: 128*7*7
            nn.ReLU(),                      #output:  256*7*7
            nn.MaxPool2d(kernel_size=2)     #output after maxpool: 256*3*3
        )

        self.flatten = nn.Sequential(
            nn.Flatten(),
            nn.Linear(256*3*3, num_classes)
        )

    def forward(self,x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = self.conv3(x)
        x = self.flatten(x)
        return x
```

# 卷积大小计算公式
Padding = (kernel_size - 1) / 2 时， 卷积不改变图片大小（stride = 1）
Max_pool2d(kernel_size = 2) 尺寸减半  128*14*14 -&gt; 128*7*7

# 模型实例化，损失和优化器

```python
model = CNN(num_classes).to(device)
Loss = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
```


# 训练循环
```python
for epoch in range(num_epoch):                                  #训练几轮，epoch=3就是训练全部的数据集3次
    print('开始训练')
    model.train()                                               #训练模式
    train_loss = 0                                              #初始化损失
    for image, label in train_dataloader:                       #每次从数据集中取出一个图片和他的标签
        image, label = image.to(device), label.to(device)       #放进GPU

        optimizer.zero_grad()                                   #清空上次训练的梯度
        output = model(image)                                   #得到这张图片的预测结果
        loss = criterion(output, label)                         #计算预测结果和真实结果的损失
        loss.backward()                                         #根据损失，反向计算每个参数应该怎么调整
        optimizer.step()                                        #按照上一步计算的结果，真正去更新模型的参数
        train_loss += loss.item()                               #把tensor转为数字

    print('开始验证')
    model.eval()
    with torch.no_grad():                                       # 不计算梯度，节省内存，验证时不需要更新参数
        correct = 0                                             # 初始化正确数量为0
        for image, label in test_dataloader:                    # 每次从测试集取出一批图片和标签
            image, label = image.to(device), label.to(device)
            output = model(image)                               # 得到模型预测结果（10个类别的得分
            correct += (output.argmax(1) == label).sum().item() # 取得分最高的类别和真实标签对比，统计正确数量并累加

    print(f'Epoch {epoch+1}/{num_epoch} | '
          f'训练损失: {train_loss/len(train_dataloader):.2f} | '
          f'准确值: {100.*correct/len(test_dataloader.dataset):.2f}%')
```
。</description><guid isPermaLink="true">https://JunhaoZhou1222.github.io/JunhaoZhou.github.io/post/shi-jue-shen-jing-wang-luo-%20Pytorch%20CNN%20NN.html</guid><pubDate>Wed, 11 Mar 2026 04:40:54 +0000</pubDate></item><item><title>机器学习神经网络的基本架构</title><link>https://JunhaoZhou1222.github.io/JunhaoZhou.github.io/post/ji-qi-xue-xi-shen-jing-wang-luo-de-ji-ben-jia-gou.html</link><description>## 1.数据获取
## 2.特征工具
## 3.建立模型
## 4.评估与应用

# K-近邻
1.计算已知点与其他所有点的距离
2.按照距离排序
3.找到与当前点最近的k个点
4.确定前k个点属于各个类型的概率
5.将前k个点出现频率最高的点作为当前点的预测分类

# 损失函数（Loss）
总损失 = 数据损失 + lambda正则化
lambda越大意味着惩罚力度越大，对模型复杂度容忍度降低，模型会变得更平滑，不纠结异常点，但是容易欠拟合
lambda越小意味着惩罚力度越小，模型会把训练集的错误降为0，模型会变得扭曲复杂，但是容易过拟合


&lt;img width='767' height='373' alt='Image' src='https://github.com/user-attachments/assets/f030e94c-d7e4-447e-a5e2-4027ed986cc9' /&gt;

# 回归问题：
MSE, MAE用于回归训练（预测连续数值)

# 分类问题：
Binary Cross entropy用于二分类问题
Category Cross entropy用于多分类问题

# 前向传播：

&lt;img width='789' height='376' alt='Image' src='https://github.com/user-attachments/assets/5269f051-e235-41fb-8317-25089c031bdc' /&gt;

L=-logP(x), L越大，正确概率越小

# 神经元
在复杂任务上用太少会欠拟合
在简单任务上用太多会过拟合

# 激活函数

&lt;img width='729' height='358' alt='Image' src='https://github.com/user-attachments/assets/b394ee55-c63c-461e-afcc-be390d3d0ae5' /&gt;

## CNN 卷积神经网络
输入层
卷积层
池化层
全连接层

&lt;img width='789' height='316' alt='Image' src='https://github.com/user-attachments/assets/7837cb0b-8d8c-45d8-bbd3-7ba364c716fe' /&gt;

&lt;img width='781' height='453' alt='Image' src='https://github.com/user-attachments/assets/1d6b07e0-e0b7-454e-afac-77ca04793a6e' /&gt;

# 数据预处理
初始化权重矩阵
W= 0.01 * np.random.randn(Depth, Height)

&lt;img width='698' height='291' alt='Image' src='https://github.com/user-attachments/assets/755c3fea-caa5-4eaa-a679-c5a89a0c579e' /&gt;

# 卷积结果计算公式
长度H2 = (H1 - Fh + 2P) / S + 1
宽度W2 = (W1 - Fw + 2P) / S + 1

# 权重参数

&lt;img width='756' height='352' alt='Image' src='https://github.com/user-attachments/assets/f212d35a-cec6-4cc8-8ba9-cdd05894e092' /&gt;


# Resnet 残差网络

&lt;img width='760' height='342' alt='Image' src='https://github.com/user-attachments/assets/648f1dc8-e7c7-41ed-9b35-1c8dbd8dfd21' /&gt;。</description><guid isPermaLink="true">https://JunhaoZhou1222.github.io/JunhaoZhou.github.io/post/ji-qi-xue-xi-shen-jing-wang-luo-de-ji-ben-jia-gou.html</guid><pubDate>Mon, 09 Mar 2026 23:57:35 +0000</pubDate></item></channel></rss>