96SEO 2026-02-20 05:11 0
咳咳最近刚做了一个训练集有1143张分为5类里面图片是打乱的。

测试集有248张想把它分分类看看咋样。
这是经过100轮训练后准确率。
准确率最高也就72%左右要想再升高就要改变数据集或者改网络了
预测第一张图属于第二类它的确也确实属于第二类但第二张图预测它是第二类但是它事实上属于第四类。
MNIST、Fashion-MNIST、EMNIST、COCO、LSUN、ImageFolder、DatasetFolder、Imageenet-12、CIFAR、STL10
该数据集包含10个类别的60000张32x32彩色图像每类有6000张图像。
其中有50000张用于训练10000张用于测试。
数据集被分为五个训练批次和一个测试批次每批包含10000张图像。
测试批次包含每个类别中随机选取的1000张图像。
训练批次按照随机顺序包含剩余的图像但有些训练批次可能包含某一类图像的数量多于另一类。
在它们之间训练批次包含每类5000张图像.)
transforms.Compose([transforms.Resize((96,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
DataLoader(datasettrain_dataset,batch_sizebatch_size,
DataLoader(datasettest_dataset,batch_sizebatch_size,
transforms.Compose([transforms.Resize((96,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
train_dataset指定了数据集的根目录和使用的数据转换操作。
datasets.CIFAR10(rootrD:\SH1\CIFAR,
test_dataset同样指定了数据集的根目录和使用的数据转换操作。
DataLoader(datasettrain_dataset,
train_loader用于加载训练数据集指定了数据集、批量大小和是否打乱数据顺序。
DataLoader(datasettest_dataset,
test_loader用于加载测试数据集同样指定了数据集、批量大小和是否打乱数据顺序。
以上上周我们老师给我的数据集为例。
老师给我的数据集里面包含训练集和测试集以及相应的标签。
pd.read_csv(Training_labels.csv)
pd.read_csv(Testing_labels.csv)#
new_df_train.to_csv(train_labels.csv,
new_df_test.to_csv(test_labels.csv,
indexFalse)所以我通过上面的代码将第一列和第二列进行了提取并且改成了filename,
pd.read_csv(csv_file)self.root_dir
transformNone):定义了类的初始化方法接受三个参数csv_file
try...except...尝试打开图像文件如果文件不存在则捕获
self.transform(image)如果存在数据转换操作则对图像进行相应的转换。
transforms.Compose([transforms.Resize((96,
CustomDataset(csv_filetrain_labels.csv,
CustomDataset(csv_filetest_labels.csv,
由于这个代码和下载并配置CIFAR-10数据集及加载器的代码差不多刚才仔细讲过了所以这里就不再讲一遍了
我们用的是ResNet-18网络要想更好的理解这个网络我们需要了解一个知识点----残差块。
connection来缓解深层神经网络中的梯度消失问题从而使得训练更深层的网络成为可能。
具体来说
跳跃连接在每个残差块中通过将输入直接与输出相加即跳跃连接实现了从底层到顶层的直接信息传递。
这种跳跃连接有助于梯度的流动避免了梯度在深层网络中逐渐消失的问题。
缓解梯度消失由于跳跃连接的存在即使在深层网络中梯度可以通过跳跃连接直接传播到较浅层从而减轻了梯度消失问题使得网络更容易训练。
增强网络性能残差块的设计使得网络更加深层时仍能保持较好的性能因为网络可以更好地学习残差即残差块的输出与输入之间的差异而不是直接学习原始特征。
经典CNN网络Resnet18网络结构输入和输出[通俗易懂]-腾讯云开发者社区-腾讯云
strides1):super().__init__()self.conv1
nn.BatchNorm2d(num_channels)self.bn2
nn.BatchNorm2d(num_channels)def
self.bn1(...):对卷积层的输出应用第一个批量归一化层F.relu(...):
F.relu(self.bn1(self.conv1(X)))#
将输入X或经过1x1卷积层的X加到Y上实现残差连接。
return
F.relu(self.bn1(self.conv1(X))):
ReLU激活函数nn.MaxPool2d(kernel_size3,
num_residuals,first_blockFalse):blk
列表中。
blk.append(Residual(input_channels,
strides2))else:blk.append(Residual(num_channels,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(128,
nn.Sequential(*resnet_block(256,
1)):自适应平均池化层将每个特征图的空间维度高度和宽度缩小到1x1。
torch.optim.Adam(net.parameters(),
torch.optim.Adam(net.parameters(),
创建了一个交叉熵损失函数用于计算模型输出与真实标签之间的损失。
交叉熵损失通常用于多分类问题特别是在输出层使用
nn.Conv2d:nn.init.xavier_uniform_(m.weight)#
对模型应用初始化权重函数net.apply(init_weights)#
将模型移动到指定的设备上进行训练net.to(device)#
enumerate(train_iter):timer.start()optimizer.zero_grad()
累积训练损失、准确率和样本数timer.stop()train_l
这里我在SH2文件夹里新建了一个文件夹result,用于存放最后结果os.makedirs(save_dir,
保存模型torch.save(net.state_dict(),
fResNet-18_SHIYAN_Epoch{epochs}_Accuracy{test_acc
DataLoader(datasettest_dataset,
创建子图plt.imshow(images.cpu()[0].permute(1,
pd.read_csv(Training_labels.csv)
pd.read_csv(Testing_labels.csv)#
new_df_train.to_csv(train_labels.csv,
new_df_test.to_csv(test_labels.csv,
pd.read_csv(csv_file)self.root_dir
transforms.Compose([transforms.Resize((96,
CustomDataset(csv_filetrain_labels.csv,
CustomDataset(csv_filetest_labels.csv,
connection来缓解深层神经网络中的梯度消失问题从而使得训练更深层的网络成为可能。
strides1):super().__init__()self.conv1
nn.BatchNorm2d(num_channels)self.bn2
nn.BatchNorm2d(num_channels)def
self.bn1(...):对卷积层的输出应用第一个批量归一化层F.relu(...):
F.relu(self.bn1(self.conv1(X)))#
将输入X或经过1x1卷积层的X加到Y上实现残差连接。
return
ReLU激活函数nn.MaxPool2d(kernel_size3,
num_residuals,first_blockFalse):blk
列表中。
blk.append(Residual(input_channels,
strides2))else:blk.append(Residual(num_channels,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(128,
nn.Sequential(*resnet_block(256,
1)):自适应平均池化层将每个特征图的空间维度高度和宽度缩小到1x1。
torch.optim.Adam(net.parameters(),
nn.Conv2d:nn.init.xavier_uniform_(m.weight)#
对模型应用初始化权重函数net.apply(init_weights)#
将模型移动到指定的设备上进行训练net.to(device)#
enumerate(train_iter):timer.start()optimizer.zero_grad()
累积训练损失、准确率和样本数timer.stop()train_l
D:\\SH2\\resultos.makedirs(save_dir,
保存模型torch.save(net.state_dict(),
fResNet-18_CIFAR-10_Epoch{epochs}_Accuracy{test_acc
DataLoader(datasettest_dataset,
创建子图plt.imshow(images.cpu()[0].permute(1,
附赠用CIFAR-10数据集操作的代码(20轮准确率大概在80%左右
代码1和代码2都差不多代码1和今天讲的差不多就改了一下数据集代码2删减了一部分更改了一些更为简单一点
transforms.Compose([transforms.Resize((96,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
DataLoader(datasettrain_dataset,batch_sizebatch_size,
DataLoader(datasettest_dataset,batch_sizebatch_size,
connection来缓解深层神经网络中的梯度消失问题从而使得训练更深层的网络成为可能。
strides1):super().__init__()self.conv1
nn.BatchNorm2d(num_channels)self.bn2
nn.BatchNorm2d(num_channels)def
self.bn1(...):对卷积层的输出应用第一个批量归一化层F.relu(...):
F.relu(self.bn1(self.conv1(X)))#
将输入X或经过1x1卷积层的X加到Y上实现残差连接。
return
ReLU激活函数nn.MaxPool2d(kernel_size3,
num_residuals,first_blockFalse):blk
列表中。
blk.append(Residual(input_channels,
strides2))else:blk.append(Residual(num_channels,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(128,
nn.Sequential(*resnet_block(256,
1)):自适应平均池化层将每个特征图的空间维度高度和宽度缩小到1x1。
torch.optim.Adam(net.parameters(),
nn.Conv2d:nn.init.xavier_uniform_(m.weight)#
对模型应用初始化权重函数net.apply(init_weights)#
将模型移动到指定的设备上进行训练net.to(device)#
enumerate(train_iter):timer.start()optimizer.zero_grad()
累积训练损失、准确率和样本数timer.stop()train_l
D:\\SH1\\result-1os.makedirs(save_dir,
保存模型torch.save(net.state_dict(),
fResNet-18_SHIYAN_Epoch{epochs}_Accuracy{test_acc
DataLoader(datasettest_dataset,
创建子图plt.imshow(images.cpu()[0].permute(1,
transforms.Compose([transforms.Resize((96,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
datasets.CIFAR10(rootrD:\SH1\CIFAR,
DataLoader(datasettrain_dataset,batch_sizebatch_size,
DataLoader(datasettest_dataset,batch_sizebatch_size,
strides1):super().__init__()self.conv1
nn.BatchNorm2d(num_channels)self.bn2
nn.BatchNorm2d(num_channels)def
F.relu(self.bn1(self.conv1(X)))Y
nn.ReLU(),nn.MaxPool2d(kernel_size3,
num_residuals,first_blockFalse):blk
first_block:blk.append(Residual(input_channels,
strides2))else:blk.append(Residual(num_channels,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(64,
nn.Sequential(*resnet_block(128,
nn.Sequential(*resnet_block(256,
nn.Conv2d:nn.init.xavier_uniform_(m.weight)net.apply(init_weights)print(fTraining
on:[{device}])net.to(device)optimizer
torch.optim.Adam(net.parameters(),
d2l.Accumulator(3)net.train()for
enumerate(train_iter):timer.start()optimizer.zero_grad()X,
y)l.backward()optimizer.step()with
{test_acc*100:.2f}%)print(f{metric[2]
[{str(device)}])torch.save(net.state_dict(),fD:\\SH1\\result-2\\ResNet-18_CIFAR-10_Epoch{epochs}_Accuracy{test_acc*100:.2f}%.pth)epochs,
DataLoader(datasettest_dataset,
shuffleTrue)plt.figure(figsize(12,
{name[int(labels[0])]}plt.subplot(3,
1)plt.imshow(images.cpu()[0].permute(1,
fontsize10)plt.xticks([])plt.yticks([])plt.show()show_predict()
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback