96SEO 2026-02-19 12:06 12
1.网上的代码大多都写在一个函数里#xff0c;但是其实很多好论文都是把网络#xff0c;数据训练等分开写的。

2.分开写就是有一个需要注意的事情#xff0c;就是要import
1.网上的代码大多都写在一个函数里但是其实很多好论文都是把网络数据训练等分开写的。
#nn.func这个里面很多功能其实nn里就有可以不导入而且后面新的版本的torch也取消了cc.functional里面的部分函数#定义网络需要定义两部分一部分就是初始化另一部分就是数据流
__init__(self):super(FCNet,self).__init__()self.fc1
nn.Linear(8,16#初始的这个8要和你的数据的特征数一样才行后面的数可以随意设置但是不要太多容易过拟合#
nn.Linear(16,2)#二分类输出2其实1也可以的#最后的就是分类数因为用的sigmod和交叉熵损失就不用额外加softmax了多分类要用softmaxself.sig
nn.Dropout(0.3)#可以把用到的放在这里也可以用nn.Sequential()放在一起这样后面的话就可以直接用这个不用写那么多了def
x#就是x要怎么在网络中走要写一遍#可以自己输出测试一下看看网络是不是自己想的那样在真的调用的时候再屏蔽掉
#导入pands是为了读数据当然使用numpy也可以读得sklearn是为了把训练数据分为训练和验证集data
#就是把对应的数据哪出来x代表的是feature上的datay代表的是label因为pd可以读到最上面的标签所以从第2行i1开始读就行
#test_size就是划分的比例后面的是种子意思是每次运行这个函数时候0.8就是那些0.2也还是每次一样如果想要不一样只要每次运行这个函数时候换个值就行
train_test_split(x,y,test_size0.2,random_state0)
(x.std()))#写dataset可以用两种方法第一种就是
可以使用分别的处理把数据(首先转换为tensor或者把dataframe.valus拿出来才能转换为tensor)转换为tensor并且数据类型转换为float32,如果测试没有真值需要单独转换
torch.tensor(np.array(x_train),dtypetorch.float32)
torch.tensor(np.array(y_train),dtypetorch.float32)
torch.tensor(np.array(x_test),dtypetorch.float32)
torch.tensor(np.array(x_test),dtypetorch.float32)
torch.utils.data.TensorDataset(x_train,y_train)
torch.utils.data.TensorDataset(x_test,y_test)#2.也可以直接重写datasetclass
torch.tensor(x.values,dtypetorch.float32)#
torch.tensor(y.values,dtypetorch.float32)self.data
torch.tensor(np.array(x),dtypetorch.float32)self.labels
torch.tensor(np.array(y),dtypetorch.float32)def
self.data[idx],self.labels[idx]#应该返回的是list类型不是字典也不是setBATCH_SIZE
DataLoader(train_dataset,batch_sizeBATCH_SIZE,shuffleTrue)
DataLoader(test_dataset,batch_sizeBATCH_SIZE,shuffleFalse)
然后就可以写train或者test了其实test和train一样
这样可以直接用xxx现在的这个需要用data.xxx#看自己的设备最好用gpu来跑
(torch.cuda.is_available()):my_device
torch.device(cpu)print(my_device)
#实例化一个net并且放到gpu上需要放到gpu上的有inputslabelsnetloss
#一开始是不需要weight_decay也就是l2正则化,可以等出现过拟合在用也可以先用上
optim.Adam(net.parameters(),lr0.001,weight_decay0.01)epochs
#定义train因为一边训练一边验证所有就把两个loader都放进去了不过写法很多也可以不放dataloader放epoches也可以
train(dataloader,valloader):losses
enumerate(dataloader):#需要注意的这里的inputs和labels和之前定义的dataset相关需要是list类型才可以inputs,labels
data#print(data)可以打印出来查看一下inputs,labels
inputs.to(my_device),labels.to(my_device)optimizer.zero_grad()#每次要梯度清零outputs
net(inputs)#print(outputs)#model的最后一层是sigmod#labels的格式需要注意因为现在是[[1],[0],[1],[1]..]这样得格式无法放到交叉熵了需要时[0,1,1,1...]这样得格式才行loss
criterion(outputs,labels.squeeze(1).long()).to(my_device)#print(labels.squeeze(1).long())loss.backward()optimizer.step()loss_batch
i#验证的时候不用反向传播和梯度下降这些net.eval()count
enumerate(valloader):val_inputs,val_labels
val_inputs.to(my_device),val_labels.squeeze(1).long().to(my_device)val_outputs
criterion(val_outputs,val_labels)#因为net的最后一层是2所以输出的是2维的【0.60.4】这种但是这个可以直接放到交叉熵中#——中放的是概率pred中放的是预测的类别算损失还是要用outputs但是算准确率就是用pred和真实labels相比了_,pred
torch.max(val_outputs,1)#print(pred)right
9:print(train_epoch:,epoch1,train_loss:,loss_batch/length,val_loss:,loss_batch_val/length2,acc:,acc)losses.append(loss_batch/length)acces.append(acc)losses_val.append(loss_batch_val/length2)#可以画一些曲线输出一些值plt.plot(range(60),losses,color
train_loss)plt.plot(range(60),acces,
val_acc)plt.plot(range(60),losses_val,color
val_loss)plt.legend()plt.show()torch.save(net.state_dict(),./weights_epoch1000.pth)#保存参数train(data.train_loader,data.test_lodaer)
最后看一下结果最后的准确率在85%左右还可以毕竟数据不多也是简单的全连接。
在这个结果之前出现了很多问题比如波动很大损失先降后升等问题找个有问题的图
a.降低模型的复杂程度但是修改具体的神经元个数因为这个网络本身就不大所有没啥用模型非常大没准会有用。
c.输入数据进行归一化是有用的归一化之后lr可以调大一点收敛变快了。
d.L2正则化是有用的很有用。
dropout应该也有用但是模型本来就很小我试了试没啥差别。
而且有正则化之后可以加速收敛lr可以稍微调大一点较少的epoches也可以收敛了而已acc也会更高一点稳定一点。
作为专业的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