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

网站维护和推广c 网站开发 书

网站维护和推广,c 网站开发 书,新吁网站建设,闵行网站推广前言 卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络#xff0c;是深度学习的代表算法之一#xff0c;它通过卷积层、池化层、全连接层等结构#xff0c;可以有效地处理如时间序列和图片数据等。关于卷积的概念网络上也比较多#xff0c;这里就不一一描述了。…前言 卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络是深度学习的代表算法之一它通过卷积层、池化层、全连接层等结构可以有效地处理如时间序列和图片数据等。关于卷积的概念网络上也比较多这里就不一一描述了。实战为主当然要从实际问题出发用代码的方式加深印象。在写代码前我先说一下为什么我要写这篇文章 之前我也用 Tensorflow.js 跟着别人试过图片分类虽然结果是有了但是对代码的理解和印象并不深刻。后来由于工作业务原因才接触 PyTorch发现这个框架更好上手整一圈后就想用这个把之前用得图片也实现一下分类。开始也是看文章实现但是网上大部分都是用 MNIST 数据集实现的手写字识别而业务中有时就是一些指定的不规则小众图片识别所以下面就简单实现一个自定义的图片集归类。 流程 根据自己的定义收集图片并归类读取图片数据和归类标签保存数据集固定图片大小 (会变形)归一化转张量定义超参数损失函数和优化器等炼丹重复查看损失值准确率等指标保存模型参数加载测试图片分类效果 环境 Python 3.8Torch 1.9.0Pillow 10.0TorchvisionNumpyPandasMatplotlib 编码 写代码前已经把需要的图片做好了分类上面的依赖包也已经安装完毕。由于只是演示这里没有用预训练模型ResNet、VGG因为训练时要用的是 Tensor所以需要先读取文件夹内的图片先转化为 PIL 的对象数据或 Numpy 数据然后可以对图片进行调整最后全都转成 Tensor也可以跳过 PIL 直接转张量。这里需要注意的是对灰彩图片通道不同尺寸图的统一处理就是灰色图的单通道要通过复制的方式创建三个通道所以图片设置一样的像素大小。因为在卷积网络中输入的通道数和输入大小要一致不然可能在训练中报错。 图片数据生成 这里就是遍历各个分类文件夹的图片转换为对象信息数据和提取所有分类分别保存到指定位置当然也可以在这里划分训练数据校验数据测试数据需要的可以扩展这里就跳过了。 # -*- coding: utf-8 -*- import os import pickle as pkl import pandas as pd from PIL import Imageall_cate [] data_set [] directory ./data/train for index, data in enumerate(os.walk(directory)):root, dirs, files dataif index 0:all_cate dirselse:sorted(all_cate)root_names root.split(\\)dir_name root_names[-1]for img in files:img_path root \\ imgimg_np Image.open(img_path)dict {}dict[img_np] img_npdict[label] all_cate.index(dir_name) 1data_set.append(dict)# 字典转DataFrame df pd.DataFrame(data_set) pkl.dump(df, open(data/train_dataset.p, wb)) open(data/all_cate.txt, encodingutf-8, modew).write(\n.join(all_cate))print(存档数据成功~)批量数据集标准化 这里是读取序列化的图片信息对所有图片统一像素 (一般配置电脑最好在 100px 以内不然会很卡) 并标准归一化后转换为 Tensor。然后判断图片通道数如果是灰色图可以复制张量三次以创建三个通道最后通过 torch 的 DataLoader 在训练前完成数据集的加载。 # -*- coding: utf-8 -*- import torch from torchvision import transforms import pickle as pkl from torch.utils.data import Datasetclass DataSet(Dataset):def __init__(self, pkl_file):df pkl.load(open(pkl_file, rb))self.dataFrame dfdef __len__(self):return len(self.dataFrame)def __getitem__(self, item):img_np self.dataFrame.iloc[item, 0]label self.dataFrame.iloc[item, 1]transform transforms.Compose([transforms.Resize((100, 100)), # 根据需要调整图像大小transforms.ToTensor(),transforms.Normalize([0.5], [0.5]) # 标准归一化, p1.均值 p2.方差])image_tensor transform(img_np)if image_tensor.shape[0] 1: image_tensor image_tensor.repeat(3, 1, 1) res {img_tensor: image_tensor,label: torch.LongTensor([label-1]) # 需要实际的索引值}return res 神经网络模型 这里创建的是卷积神经网络接收 3 通道第一层卷积层卷积核 3x3输出 25 维张量通过批标准化BatchNorm2d进行归一化处理最后通过 ReLU 激活函数进行非线性变换。第一层池化使用 2x2 的最大池化操作对卷积后的特征图进行下采样。第二层也是卷积和对应的池化最后是全连接层。将经过池化的特征图展平然后通过一个有 1024 个神经元的全连接层再通过 ReLU 激活函数进行非线性变换。之后是一个有 128 个神经元的全连接层最后再通过 ReLU 激活函数进行非线性变换输出 5 个神经元代表分类的概率分布。 # -*- coding: utf-8 -*- import torch.nn as nn import torch import math import torch.functional as Fclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.layer1 nn.Sequential(nn.Conv2d(3, 25, kernel_size3),nn.BatchNorm2d(25),nn.ReLU(inplaceTrue))self.layer2 nn.Sequential(nn.MaxPool2d(kernel_size2, stride2))self.layer3 nn.Sequential(nn.Conv2d(25, 50, kernel_size3),nn.BatchNorm2d(50),nn.ReLU(inplaceTrue))self.layer4 nn.Sequential(nn.MaxPool2d(kernel_size2, stride2))self.fc nn.Sequential(nn.Linear(50 * 23 * 23, 1024),nn.ReLU(inplaceTrue),nn.Linear(1024, 128),nn.ReLU(inplaceTrue),nn.Linear(128, 5))def forward(self, x):x self.layer1(x)x self.layer2(x)x self.layer3(x)x self.layer4(x)x x.view(x.size(0), -1)x self.fc(x)return x开始训练 # -*- coding:utf-8 -*- import torch from torch.utils.data import DataLoader import matplotlib.pyplot as plt from data_set import DataSet from torch.autograd import Variable from utils import * import cnn import torch.nn as nn import numpy as np import torch.optim as optim# 定义超参数 batch_size 1 learning_rate 0.02 num_epoches 1# 加载图片tensor训练集 tain_dataset DataSet(data/train_dataset.p) train_loader DataLoader(tain_dataset, batch_sizebatch_size, shuffleTrue)model cnn.CNN()# 定义损失函数和优化器 criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lrlearning_rate)# 训练模型 train_loses [] records [] for i in range(num_epoches):for ii, data in enumerate(train_loader):img data[img_tensor]label data[label].view(-1)optimizer.zero_grad()out model(img)loss criterion(out, label)train_loses.append(loss.data.item())loss.backward()optimizer.step()if ii % 50 0:print(epoch: {}, loop: {}, loss: {:.4}.format(i, ii, np.mean(train_loses)))records.append([np.mean(train_loses)])# 绘制模型的损失准确率走势图 train_loss [data[0] for data in records] plt.plot(train_loss, label Train Loss) plt.xlabel(Steps) plt.ylabel(Loss) plt.legend() plt.show()# 模型评估(略) # model.eval()# 模型保存 torch.save(model, params/cnn_imgs_02.pkl)模型检测 训练完成保存参数到本地下面就是将加载进的参数来测试其他图片的分类效果同样的也是将指定图片和训练时一样的转换操作最后将预测结果取出最大分布索引值根据索引就可以匹配出分类名称了。另一个是工具函数将 tensor 格式的图片在预测结果后显示在 pyplot 中。 # -*- coding:utf-8 -*- import torch from torch.utils.data import DataLoader import matplotlib.pyplot as plt from data_set import DataSet from utils import * import torchvision from PIL import Image from torchvision import transforms import cnndef imshow(img):img img / 2 0.5npimg img.numpy()plt.imshow(np.transpose(npimg, (1, 2, 0)))plt.show()model torch.load(params/cnn_imgs_02.pkl)img_path imgs/05.jpg img_np Image.open(img_path) transform transforms.Compose([transforms.Resize((100, 100)), transforms.ToTensor(),transforms.Normalize([0.5], [0.5]) ]) image_tensor transform(img_np)# 如果是灰度图片 if image_tensor.shape[0] 1: image_tensor image_tensor.repeat(3, 1, 1) image_tensor image_tensor.view(-1, 3, 100, 100)predict model(image_tensor) indices torch.max(predict, 1)[1].item()all_cate [] for line in open(data/all_cate.txt, encodingutf-8, moder):all_cate.append(line.strip())cate_name try:cate_name all_cate[indices] except ValueError:cate_name 未知print(识别结果是, cate_name) # imshow(torchvision.utils.make_grid(image_tensor)) # 原图显示 img_np.show() exit()
http://wiki.neutronadmin.com/news/350931/

相关文章:

  • 网站建设待遇php面向对象网站开发
  • 网站被墙怎么做跳转黑龙江新闻最新消息今天
  • 智慧团建网站登录电脑版成都网站建设找重庆最佳科技
  • 网站定制开发最简单的网站开发
  • 网站建设页面图做网站和做平台的区别
  • 南京定制网站哪个好虚拟邮箱注册网站
  • 网站地图是怎么做的黄山公司做网站
  • 网站设计配色案列郴州建网站
  • 网页设计素材网站营销手机软件开发定制
  • 期货贵金属网站建设网站建设企业模板哪家好
  • 网站开发设计运维秦皇岛在什么地方
  • 模板网站最大缺点重庆网站建设优化
  • 信丰网站制作公司平台
  • 网站的总体方案与功能设计满堂彩谁做的网站
  • 模块网站怎么做中山市建设工程 交易中心网站
  • 洛阳市住房和城乡建设局网站discuz注册
  • 网站建设与管理工作内容邢台有几个县
  • 中石油网页设计与网站建设义乌企业网站建设
  • 快刷网站挪威网站后缀
  • 视频网站建设成本网页设计素材以及效果图
  • 企业网站模板湖南岚鸿模板奉化网站关键词优化费用
  • 四川做网站公司wordpress 采集 伪原创
  • 怎么做垂直网站网站建设副业
  • 如何向搜索引擎提交网站网页设计实验总结报告
  • 唐山网址建站网站设计 书籍
  • 网站建设运维方案小外包公司
  • 手机哪里可以做视频网站怎么一键删除wordpress
  • 网站的ppt方案怎么做flask做网站
  • 手机做网站对比路由器做网站做网站镜像步骤
  • 我的网站在百度搜不到了网络推广途径和推广要点