大数据营销策略有哪些麒麟seo外推软件

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

大数据营销策略有哪些,麒麟seo外推软件,网站核验点查询,网站群建设 会议 主持卷积神经网络介绍 卷积神经网络#xff08;Convolutional Neural Network#xff0c;简称CNN#xff09;#xff0c;是一种深度学习模型#xff0c;特别适用于处理图像、视频等数据。它的核心思想是利用卷积层#xff08;Convolutional layers#xff09;来提取输入数据…卷积神经网络介绍 卷积神经网络Convolutional Neural Network简称CNN是一种深度学习模型特别适用于处理图像、视频等数据。它的核心思想是利用卷积层Convolutional layers来提取输入数据中的局部特征通过滑动窗口的方式扫描数据并应用滤波器filter或kernel进行特征检测。每一层卷积会捕获不同尺度和位置的特征然后通过池化层pooling layers减少数据尺寸并保留重要信息。 卷积结构 如下图所示一个简单的CNN由输入层卷积层池化层全连接层输出层组成
输入层(Input) 输入层的作用就是将图像转换为其对应的由像素值构成的二维矩阵并将此二维矩阵存储等待后面几层的操作。 **如果输入一张尺寸为(H, W)的彩色图像则输入层的数据为一个(H×W×3)的矩阵数值范围为[0, 255]其中3表示RGB三个通道一般称作该输入层为3通道(channel)或者说包含3个feature map如果是灰度图像则数据表示为(H×W×1)1个通道或者1个feature map。从数值上讲此处的3通道或者1通道与后续每一层卷积结果的feature map数量是等价的。 卷积层(Conv) 假设我们已经得到图片的二维矩阵了想要提取其中特征那么卷积操作就会为存在特征的区域确定一个高值否则确定一个低值。这个过程需要通过计算其与卷积核Convolution Kernel的乘积值来确定。假设我们现在的输入图片是一个人的脑袋而人的眼睛是我们需要提取的特征那么我们就将人的眼睛作为卷积核通过在人的脑袋的图片上移动来确定哪里是眼睛这个过程如下所示 有的读者可能注意到每次卷积核移动的时候中间位置都被计算了而输入图像二维矩阵的边缘却只计算了一次会不会导致计算的结果不准确呢 让我们仔细思考如果每次计算的时候边缘只被计算一次而中间被多次计算那么得到的特征图也会丢失边缘特征最终会导致特征提取不准确那为了解决这个问题我们可以在原始的输入图像的二维矩阵周围再拓展一圈或者几圈这样每个位置都可以被公平的计算到了也就不会丢失任何特征此过程可见下面两种情况这种通过拓展解决特征丢失的方法又被称为Padding。 池化层(pooling) 当特征图非常多的时候意味着我们得到的特征也非常多但是这么多特征都是我们所需要的么显然不是其实有很多特征我们是不需要的而这些多余的特征通常会给我们带来如下两个问题 过拟合维度过高 为了解决这个问题我们可以利用池化层那什么是池化层呢池化层又称为下采样也就是说当我们进行卷积操作后再将得到的特征图进行特征提取将其中最具有代表性的特征提取出来可以起到减小过拟合和降低维度的作用这个过程如下所示 如何提取到最有代表性的特征呢通常有两种方法最大池化 顾名思义最大池化就是每次取正方形中所有值的最大值这个最大值也就相当于当前位置最具有代表性的特征这个过程如下所示 这里有几个参数需要说明一下 ① kernel_size 2池化过程使用的正方形尺寸是2×2如果是在卷积的过程中就说明卷积核的大小是2×2 ② stride 2每次正方形移动两个位置从左到右从上到下这个过程其实和卷积的操作过程一样 ③ padding 0这个之前介绍过如果此值为0说明没有进行拓展

  1. 平均池化 平均池化就是取此正方形区域中所有值的平均值考虑到每个位置的值对于此处特征的影响平均池化计算也比较简单整个过程如下图所示 以上就是关于池化层的所有操作我们再回顾一下经过池化后我们可以提取到更有代表性的特征同时还减少了不必要的计算这对于我们现实中的神经网络计算大有脾益因为现实情况中神经网络非常大而经过池化层后就可以明显的提高模型的效率。所以说池化层的好处很多将其优点总结如下 在减少参数量的同时还保留了原图像的原始特征 有效防止过拟合 为卷积神经网络带来平移不变性 全连接层(fully connected) 假设还是上面人的脑袋的示例现在我们已经通过卷积和池化提取到了这个人的眼睛、鼻子和嘴的特征如果我想利用这些特征来识别这个图片是否是人的脑袋该怎么办呢此时我们只需要将提取到的所有特征图进行“展平”将其维度变为1 × x 1×x1×x这个过程就是全连接的过程也就是说此步我们将所有的特征都展开并进行运算最后会得到一个概率值这个概率值就是输入图片是否是人的概率这个过程如下所示 可以看到经过两次卷积和最大池化之后得到最后的特征图此时的特征都是经过计算后得到的所以代表性比较强最后经过全连接层展开为一维的向量再经过一次计算后得到最终的识别概率这就是卷积神经网络的整个过程。 输出层 卷积神经网络的输出层理解起来就比较简单了我们只需要将全连接层得到的一维向量经过计算后得到识别值的一个概率当然这个计算可能是线性的也可能是非线性的。在深度学习中我们需要识别的结果一般都是多分类的所以每个位置都会有一个概率值代表识别为当前值的概率取最大的概率值就是最终的识别结果。在训练的过程中可以通过不断地调整参数值来使识别结果更准确从而达到最高的模型准确率。 基于AlexNet实现“猫狗分类”步骤 AlexNet网络结构相对简单使用了8层卷积神经网络前5层是卷积层剩下的3层是全连接层具体如下所示。      了解AlexNet网络结构 在深度学习框架下搭建一个网络进行训练和测试十分方便主要包括三个步骤 准备数据将数据集中的数据整理成程序代码可识别读取的形式。 def mkfile(file):if not os.path.exists(file):os.makedirs(file)

    获取data文件夹下所有文件夹名即需要分类的类名

    file_path D:/python-learning/AlexNet/data_name flower_class [cla for cla in os.listdir(file_path)]# 创建 训练集train 文件夹并由类名在其目录下创建5个子目录 mkfile(data/train) for cla in flower_class:mkfile(data/train/ cla)# 创建 验证集val 文件夹并由类名在其目录下创建子目录 mkfile(data/val) for cla in flower_class:mkfile(data/val/ cla)# 划分比例训练集 : 验证集 8 : 2 split_rate 0.2# 遍历所有类别的全部图像并按比例分成训练集和验证集 for cla in flower_class:cla_path file_path / cla / # 某一类别的子目录images os.listdir(cla_path) # iamges 列表存储了该目录下所有图像的名称num len(images)eval_index random.sample(images, kint(num * split_rate)) # 从images列表中随机抽取 k 个图像名称for index, image in enumerate(images):# eval_index 中保存验证集val的图像名称if image in eval_index:image_path cla_path imagenew_path data/val/ clacopy(image_path, new_path) # 将选中的图像复制到新路径# 其余的图像保存在训练集train中else:image_path cla_path imagenew_path data/train/ clacopy(image_path, new_path)print(\r[{}] processing [{}/{}].format(cla, index 1, num), end) # processing barprint()print(processing done!)搭建网络利用PyTorch提供的API搭建设计的网络 class MyAlexNet(nn.Module):def init(self):super(MyAlexNet, self).init()# 卷积层self.c1 nn.Conv2d(in_channels3, out_channels48, kernel_size11, stride4, padding2)# 激活函数self.ReLu nn.ReLU()# 卷积层self.c2 nn.Conv2d(in_channels48, out_channels128, kernel_size5, stride1, padding2)# 池化层self.s2 nn.MaxPool2d(2)# 卷积层self.c3 nn.Conv2d(in_channels128, out_channels192, kernel_size3, stride1, padding1)# 池化层self.s3 nn.MaxPool2d(2)# 卷积层self.c4 nn.Conv2d(in_channels192, out_channels192, kernel_size3, stride1, padding1)# 卷积层self.c5 nn.Conv2d(in_channels192, out_channels128, kernel_size3, stride1, padding1)# 池化层self.s5 nn.MaxPool2d(kernel_size3, stride2)self.flatten nn.Flatten()# 全连接层self.f6 nn.Linear(4608, 2048)self.f7 nn.Linear(2048, 2048)self.f8 nn.Linear(2048, 1000)self.f9 nn.Linear(1000, 2)def forward(self, x):x self.ReLu(self.c1(x))x self.ReLu(self.c2(x))x self.s2(x)x self.ReLu(self.c3(x))x self.s3(x)x self.ReLu(self.c4(x))x self.ReLu(self.c5(x))x self.s5(x)x self.flatten(x)x self.f6(x)x F.dropout(x, p0.5)x self.f7(x)x F.dropout(x, p0.5)x self.f8(x)x F.dropout(x, p0.5)x self.f9(x)return x# 实例化与测试 if name main:x torch.rand([1, 3, 224, 224])model MyAlexNet()y model(x)训练网络把1中准备好的数据送入2中搭建的网络中进行训练获得网络各节点权值参数 # 训练集的路径 ROOT_TRAIN rD:/python-learning/AlexNet/data/train

    验证集路径

    ROOT_TEST rD:/python-learning/AlexNet/data/val# 将图像的像素值归一化到【-1 1】之间 normalize transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])# 图片预处理 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),transforms.ToTensor(),normalize])val_transform transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),normalize])# 导入数据 train_dataset ImageFolder(ROOT_TRAIN, transformtrain_transform) val_dataset ImageFolder(ROOT_TEST, transformval_transform)train_dataloader DataLoader(train_dataset, batch_size32, shuffleTrue) val_dataloader DataLoader(val_dataset, batch_size32, shuffleTrue)device cuda if torch.cuda.is_available() else cpumodel MyAlexNet().to(device)# 定义一个损失函数 loss_fn nn.CrossEntropyLoss()# 定义一个优化器 optimizer torch.optim.SGD(model.parameters(), lr0.01, momentum0.9)# 学习率每隔10轮变为原来的0.5 lr_scheduler lr_scheduler.StepLR(optimizer, step_size10, gamma0.5)# 定义训练函数 def train(dataloader, model, loss_fn, optimizer):loss, current, n 0.0, 0.0, 0for batch, (x, y) in enumerate(dataloader):image, y x.to(device), y.to(device)output model(image)cur_loss lossfn(output, y) # 误差, pred torch.max(output, axis1)cur_acc torch.sum(ypred) / output.shape[0]# 反向传播optimizer.zero_grad()cur_loss.backward()optimizer.step()loss cur_loss.item()current cur_acc.item()n n1train_loss loss / ntrain_acc current / nprint(train_loss str(train_loss))print(train_acc str(train_acc)) #训练的精确度return train_loss, train_acc# 定义一个验证函数 def val(dataloader, model, loss_fn):# 将模型转化为验证模型model.eval()loss, current, n 0.0, 0.0, 0with torch.no_grad():for batch, (x, y) in enumerate(dataloader):image, y x.to(device), y.to(device)output model(image)cur_loss lossfn(output, y), pred torch.max(output, axis1)cur_acc torch.sum(y pred) / output.shape[0]loss cur_loss.item()current cur_acc.item()n n 1val_loss loss / nval_acc current / nprint(val_loss str(val_loss))print(val_acc str(val_acc))return val_loss, val_acc# 定义画图函数 def matplot_loss(train_loss, val_loss):plt.plot(train_loss, labeltrain_loss)plt.plot(val_loss, labelval_loss)plt.legend(locbest)plt.ylabel(loss)plt.xlabel(epoch)plt.title(训练集和验证集loss值对比图)plt.show()def matplot_acc(train_acc, val_acc):plt.plot(train_acc, labeltrain_acc)plt.plot(val_acc, labelval_acc)plt.legend(locbest)plt.ylabel(acc)plt.xlabel(epoch)plt.title(训练集和验证集acc值对比图)plt.show()# 开始训练 loss_train [] acc_train [] loss_val [] acc_val []epoch 20 min_acc 0 for t in range(epoch):print(fepoch{t1}\n———–)train_loss, train_acc train(train_dataloader, model, loss_fn, optimizer)val_loss, val_acc val(val_dataloader, model, loss_fn)loss_train.append(train_loss)acc_train.append(train_acc)loss_val.append(val_loss)acc_val.append(val_acc)# 保存最好的模型权重if val_acc min_acc:folder save_modelif not os.path.exists(folder):os.mkdir(save_model)min_acc val_accprint(fsave best model, 第{t1}轮)torch.save(model.state_dict(), save_model/best_model.pth)# 保存最后一轮的权重文件if t epoch-1:torch.save(model.state_dict(), save_model/last_model.pth) lr_scheduler.step() matplot_loss(loss_train, loss_val) matplot_acc(acc_train, acc_val) print(Done!)测试网络导入3中获取的参数并输入网络一个数据然后评估网络的输出结果 ROOT_TRAIN rD:/python-learning/AlexNet/data/train ROOT_TEST rD:/python-learning/AlexNet/data/val# 将图像的像素值归一化到【-1 1】之间 normalize transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),transforms.ToTensor(),normalize])val_transform transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),])train_dataset ImageFolder(ROOT_TRAIN, transformtrain_transform) val_dataset ImageFolder(ROOT_TEST, transformval_transform)train_dataloader DataLoader(train_dataset, batch_size32, shuffleTrue) val_dataloader DataLoader(val_dataset, batch_size32, shuffleTrue)device cuda if torch.cuda.is_available() else cpumodel MyAlexNet().to(device)# 加载模型 model.load_state_dict(torch.load(D:/python-learning/AlexNet/save_model/best_model.pth))# 获取预测结果 classes [cat,dog, ]# 把张量转化为照片格式 show ToPILImage()# 进入到验证阶段 model.eval() for i in range(2475,2525):x, y val_dataset[i][0], val_dataset[i][1]show(x).show()x Variable(torch.unsqueeze(x, dim0).float(), requires_gradTrue).to(device)x torch.tensor(x).to(device)with torch.no_grad():pred model(x)predicted, actual classes[torch.argmax(pred[0])], classes[y]print(fpredicted:{predicted}, Actual:{actual})