【Kaggle项目实战记录】狗的品种识别

15 篇文章 16 订阅
订阅专栏
8 篇文章 7 订阅
订阅专栏

这是一个动手学深度学习原课程的一个比赛项目( 狗的品种识别)。课程的 地址。
自己顺便记录一下这个项目自己的实现流程和思考,以巩固熟悉关于图片分类项目的整个流程。
用到的都是最基本的技术,初学者都会。

1 查看原数据

先浏览一下原数据长什么样子。

把数据集解压后发现下面有2个子文件夹,train中共10222张图片,为训练集;
test中共10357张图片,为测试集。
在这里插入图片描述
在这里插入图片描述

训练集的标签信息在label.csv中,id表示训练集中的图片文件名,Breed表示类别,有120个类别(狗的品种)。
在这里插入图片描述
sample_submission.csv中是届时提交的文件格式,代表测试集中各张图片中各自120个狗的品种的概率分布(softmax结果)。id代表test文件夹中各图片的文件名。
在这里插入图片描述
我们的目的是对test所有图片中的狗进行类别的预测,120个类别的预测概率都写到sample_submission.csv中。

我们发现本例的数据集图片对应的是id,(id, label)对应一组标签数据,而标签数据的信息存在了label.csv文件中。
所以我们首先需要自己写一个Dataset数据集对象,它最好可以直接传入一个含有标签数据信息的csv文件,从中构建一个数据集。

2 数据预处理,建立Dataset

先导包

import torch
from torch.utils.data import Dataset, DataLoader
from torchvision.datasets import ImageFolder
from torchvision import transforms
import torchvision

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import os
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

我们第一个目的是准备建立自己的数据集Dataset类。
我们这次准备直接给Dataset传入数据文件csv,让它自己根据文件名(id)读取图片。

先读取label.csv查看

# 读取训练集和label
train_csv = pd.read_csv('../dog_breed_identification/labels.csv')
print(len(train_csv))
train_csv

在这里插入图片描述

把label中的类名转换为类别号class_to_num(根据字符串排序),查看一下结果。

# 读取训练集和label
print('训练集总数为',len(train_csv))

# 这个class_to_num即作为类别号到类别名称的映射
labels_info = train_csv.iloc[:,1]  # 第2列的标签信息
class_to_num = labels_info.unique()
class_to_num = np.sort(class_to_num)
class_to_num

在这里插入图片描述

设定图像增广的方法

先把训练集和测试集需要的图像增广的方法设了,届时Dataset直接调用。

在训练集上:
先采用随机裁剪图像,所得图像为原始面积的0.08到1之间,高宽比在3/4和4/3之间,再缩放回224x224。
再使用随机水平翻转。
再随机更改亮度,对比度和饱和度。

在测试集上,使用放大到256×256后中心裁剪出224x224。

transform_train = transforms.Compose([
    # 随机裁剪图像,所得图像为原始面积的0.08到1之间,高宽比在3/4和4/3之间。
    # 然后,缩放图像以创建224x224的新图像
    transforms.RandomResizedCrop(224, scale=(0.08, 1.0),
                                             ratio=(3.0/4.0, 4.0/3.0)),
    transforms.RandomHorizontalFlip(),
    # 随机更改亮度,对比度和饱和度
    transforms.ColorJitter(brightness=0.4,
                                       contrast=0.4,
                                       saturation=0.4),
    # 添加随机噪声
    transforms.ToTensor(),
    # 标准化图像的每个通道
    transforms.Normalize([0.485, 0.456, 0.406],
                                     [0.229, 0.224, 0.225])])

transform_test = transforms.Compose([
    transforms.Resize(256),
    # 从图像中心裁切224x224大小的图片
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406],
                                     [0.229, 0.224, 0.225])])

创建数据集Dataset类

我给Dataset设置了以下功能:

  1. 可读入csv文件,其含有指定格式的数据(文件名 id)+标签信息。
    根据id,用PIL中的Image.open方法读入图片。
    在__getitem__中,取到图片数据的方法是用PIL的Image.open方法来实现的。open后传入的id就读取自csv文件。
  2. 可设定是否为训练集(train=True)
    如设定为训练集,我又设定了一个 训练测试比(train_test_ratio),用于在训练集中,人工再分出一小部分测试集用于训练时实时测试准确率(这样的话会给出dataset中测试集的数据索引范围,并且前后使用的图像增广的方法也不一样)。
    如果不设置train_test_ratio,则不用考虑这个问题。
    如果不设为训练集(train=False),即读入测试集,用于测试模型,提交结果。这样返回则是img, fname(id)。
  3. 训练集和测试集使用不同的图像增广方法,方法在上面已定义。
    包括训练集中如使用了train_test_ratio分出一小部分的测试集,也使用测试集的图像增广法。


    建立Dataset后,会预览数据集体验一下这个Dataset的功能。
class dog_dataset(Dataset):
    def __init__(self, csv_path, file_path, train=True, train_test_ratio=None):
        """
        Args:
            csv_path (string): 格式 csv_path = '../dog_breed_identification/labels.csv'
                如果train=True,csv文件为训练集文件名+标签信息,第一列为文件名,第二列为label
                如果train=False,csv文件为验证集的文件名信息,第一列为文件名
            file_path (string): 图片所在文件夹,格式 file_path = '../dog_breed_identification/train/'
            train=True (boolean): 是否读为训练集
            train_test_ratio=None (0~1小数): 仅当train=True时,可设置训练集占比,将训练集分成训练/测试两个部分
        """
        self.train = train

        if self.train==True:  # 仅当train=True时可设train_test_ratio
            if train_test_ratio is not None:
                if train_test_ratio > 0 and train_test_ratio < 1:
                    self.train_test_ratio = train_test_ratio
                else:
                    print('train_test_ratio设置不正确,未成功分配训练/测试集')
                    self.train_test_ratio = None
            else:
                self.train_test_ratio = None
        else:
            self.train_test_ratio = None


        self.file_path = file_path
        # 判断是否都为jpg文件
        file_list = os.listdir(self.file_path)
        jpg_tocheck = [i.split('.')[1] for i in file_list if i.split('.')[1] == 'jpg']
        assert len(jpg_tocheck) == len(file_list)

        if self.train==True:
            # 读取训练集的信息文件
            csv_file = pd.read_csv(csv_path)

            if self.train_test_ratio is None:
                # 建立imgs_filename
                self.imgs_filename = csv_file['id'].tolist()  # 第1列的文件名(id)信息

                labels_info = csv_file.iloc[:,1]  # 第2列的标签信息

                origin_labels = labels_info.tolist()  # 第2列的标签信息List

                class_to_num = labels_info.unique()
                class_to_num = np.sort(class_to_num) # 建立类别名到类别号的映射
                print('读取csv文件成功,已建立类别名到类别号的映射,映射规则为类别名按字符串排列,即sorted(类名列.unique().tolist())')

                csv_file['class_num'] = labels_info.apply(lambda x: np.where(class_to_num == x)[0][0])  # 建立新列,完成类别名到类别号的映射
                # 建立labels
                self.labels = csv_file['class_num'].tolist()
            
            else: # 当设定了训练集/测试集比率时,训练集会随机分出一部分数据归为测试集。
                self.num_train = int(len(csv_file) * train_test_ratio)
                num_test = len(csv_file) - self.num_train
                csv_file = csv_file.sample(frac=1).reset_index(drop=True) # 数据集重新打乱
                print('设定了训练集占比,随机分出训练集',str(self.num_train),'个;分出测试集',str(num_test),'个。')

                # 建立imgs_filename
                self.imgs_filename = csv_file['id'].tolist()  # 第1列的文件名(id)信息

                labels_info = csv_file.iloc[:,1]  # 第2列的标签信息

                origin_labels = labels_info.tolist()  # 第2列的标签信息List

                class_to_num = labels_info.unique()
                class_to_num = np.sort(class_to_num) # 建立类别名到类别号的映射
                print('读取csv文件成功,已建立类别名到类别号的映射,映射规则为类别名按字符串排列,即sorted(类名列.unique().tolist())')

                csv_file['class_num'] = labels_info.apply(lambda x: np.where(class_to_num == x)[0][0])  # 建立新列,完成类别名到类别号的映射
                # 建立labels
                self.labels = csv_file['class_num'].tolist()
                print('前', str(self.num_train), '个数据为训练集,已使用训练集的数据增强;之后的视作测试集,已使用测试集的数据增强。')

        else:  # 验证集的情况
            # 读取验证集的信息文件
            csv_file = pd.read_csv(csv_path)
            # 建立imgs_filename
            self.imgs_filename = csv_file['id'].tolist()  # 第1列的文件名(id)信息
        
        print()

    def __getitem__(self, index):
        fname = self.imgs_filename[index] + '.jpg'
        img = Image.open(self.file_path + fname)

        if self.train_test_ratio is None:
            if self.train==True:
                label = self.labels[index]
                return transform_train(img), label  # 使用训练集的数据增强
            else:  # 验证集上增加返回一个文件名(id)的信息,方便后期识别。并使用测试集的数据增强
                return transform_test(img), fname

        else:  # 设定了train_test_ratio的情形
            label = self.labels[index]
            if index < self.num_train: # 前num_train数为训练集,使用训练集的数据增强
                return transform_train(img), label
            else:  # num_train之后为测试集,使用测试集的数据增强
                return transform_test(img), label

    def __len__(self):
        return len(self.imgs_filename)

# 在__getitem__中,按index取到图片的方法就是用PIL中的Image.open来实现的。

预览训练集和验证集

我们预览一下通过新创建的dog_dataset类,建立各类训练集和测试集看看。

# 读取训练集看看
csv_path = '../dog_breed_identification/labels.csv'
file_path = '../dog_breed_identification/train/'
Dog_dataset = dog_dataset(csv_path, file_path, train=True)
print('第一张图的类别号、数据集的长度:', Dog_dataset[0][1], len(Dog_dataset))

train_iter = DataLoader(Dog_dataset, batch_size=128, shuffle=False)
X, y = next(iter(train_iter))

print('一个batch的数据形状、第一张图的类别:',X.shape, y[0])
print('第一张图:')
plt.imshow(torch.transpose(X[0], 0, 2))

在这里插入图片描述


# 把训练集分为训练+测试集看看
csv_path = '../dog_breed_identification/labels.csv'
file_path = '../dog_breed_identification/train/'
Dog_dataset = dog_dataset(csv_path, file_path, train=True, train_test_ratio=0.9)
print('第一张图片的类别号、数据集长度:', Dog_dataset[0][1], len(Dog_dataset))
print('第9200张图片(为测试集) :')
plt.imshow(torch.transpose(Dog_dataset[9199][0], 0, 2))

在这里插入图片描述


# 读取验证集看看
csv_path = '../dog_breed_identification/sample_submission.csv'
file_path = '../dog_breed_identification/test/'
Dog_dataset = dog_dataset(csv_path, file_path, train=False)
print('第1张图片的形状、第1张图片的类别号、数据集的长度:', (Dog_dataset[0][0]).shape, Dog_dataset[0][1], len(Dog_dataset))

valid_iter = DataLoader(Dog_dataset, batch_size=128)
X, y = next(iter(valid_iter))
print('第一批次最后一张图片:')
plt.imshow(torch.transpose(X[-1], 0, 2))

在这里插入图片描述

3 定义和初始化模型

直接使用预训练好的模型固定参数,最后加一个1000类到120的非线性激活函数+全连接层。

def get_net(devices):
    finetune_net = torch.nn.Sequential()
    # finetune_net.features = torchvision.models.resnet34(pretrained=True)
    finetune_net.features = torchvision.models.resnet50(pretrained=True)
    # 定义一个新的输出网络,共有120个输出类别
    finetune_net.output_new = torch.nn.Sequential(torch.nn.Linear(1000, 256),
                                            torch.nn.ReLU(),
                                            torch.nn.Linear(256, 120))
    # 将模型参数分配给用于计算的CPU或GPU
    finetune_net = finetune_net.to(devices)
    # 冻结参数
    for param in finetune_net.features.parameters():
        param.requires_grad = False
    return finetune_net

pretrained_net = get_net(device)

# 优化器选取
lr, wd = 0.001, 0.001
optimizer = torch.optim.AdamW(pretrained_net.parameters(), lr=lr, weight_decay=wd)

4 设置训练集和测试集

因为原始数据中,提供的测试集其实是验证集,需要提交结果,在线验证准确率。
所以,自己需要对建立的训练集再随机分割一下,分成训练集和测试集。
传入参数train_test_ratio(训练集占比)即可。

测试集可以数量远小于训练集,只是观察本地训练的效果。我设成了0.96。

# 先建立训练数据集
csv_path = '../dog_breed_identification/labels.csv'
file_path = '../dog_breed_identification/train/'
Dog_dataset_train = dog_dataset(csv_path, file_path, train=True, train_test_ratio=0.96)

在这里插入图片描述


# 上面在训练集中分出一部分测试集,以便训练时第一时间查看训练的效果

indices1 = range(9813)
train_set = torch.utils.data.Subset(Dog_dataset_train, indices1)

indices2 = range(9813, len(Dog_dataset_train))
test_set = torch.utils.data.Subset(Dog_dataset_train, indices2)
print('在数据集中分出训练集和测试(验证)集各:', len(train_set), len(test_set))

在这里插入图片描述

5 训练

# 定义train函数,使用GPU训练并评价模型
import time

# 测试集上评估准确率
def evaluate_accuracy(data_iter, net, device=None):
    """评估模型预测正确率"""
    if device is None and isinstance(net, torch.nn.Module):
        # 如果没指定device就用net的device
        device = list(net.parameters())[0].device

    acc_sum, n = 0.0, 0
    with torch.no_grad():
        for X, y in data_iter:
            # # 测试集上做数据增强(normalize)
            # X = test_augs(X)
            if isinstance(net, torch.nn.Module):
                net.eval()  # 将模型net调成 评估模式,这会关闭dropout

                # 累加这一个batch数据中判断正确的个数
                acc_sum += (net(X.to(device)).argmax(dim=1) == y.to(device)).float().sum().cpu().item()

                net.train()   # 将模型net调回 训练模式
            else:   # 针对自定义的模型(几乎用不到)
                if('is_training' in net.__code__.co_varnames):  # 如果有is_training这个参数
                    # 将 is_training 设置成False
                    acc_sum += (net(X, is_training=False).argmax(dim=1) == y).float().sum().item()
                else:
                    acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()
            n += y.shape[0]
    return acc_sum / n

def train(train_iter, test_iter, net, loss, optimizer, device, num_epochs):
    net = net.to(device)
    print('training on ', device)
    batch_count = 0
    for epoch in range(num_epochs):
        train_l_sum, train_acc_sum, n, start = 0.0, 0.0, 0, time.time()
        for X, y in train_iter:
            X = X.to(device)
            y = y.to(device)
            y_hat = net(X)
            l = loss(y_hat, y)
            optimizer.zero_grad()
            l.backward()
            optimizer.step()
            train_l_sum += l.cpu().item()
            train_acc_sum += (y_hat.argmax(dim=1) == y).sum().cpu().item()
            n += y.shape[0]
            batch_count += 1
        test_acc = evaluate_accuracy(test_iter, net)
        print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f, time %.1f sec'
                % (epoch+1, train_l_sum / batch_count, train_acc_sum / n, test_acc, time.time() - start))

def train_fine_tuning(net, optimizer, batch_size=128, num_epochs=15):
    train_iter = DataLoader(train_set, batch_size)
    test_iter = DataLoader(test_set, batch_size)
    loss = torch.nn.CrossEntropyLoss()
    train(train_iter, test_iter, net, loss, optimizer, device, num_epochs)

train_fine_tuning(pretrained_net, optimizer)

定义评估准确率和训练函数。

设置好训练集、测试集、损失函数、batch_size、训练轮数,以及模型,开始训练。
(我的设备:RTX3060)
在这里插入图片描述

6 模型存储

训练好后可以把模型储存到本地,方便重新读取和部署。

# pretrained_net 是 torchvision.models.resnet50() 类
path = 'net_pretrained.pt'
torch.save(pretrained_net.state_dict(), path)

7 验证数据,上传

我们现在需要在test.csv中预测类别。

test_csv = pd.read_csv('../dog_breed_identification/sample_submission.csv')
print(len(test_csv))
test_csv.head()

在这里插入图片描述


# 对比test_csv中的类顺序与class_to_num顺序是否一致,应当都是按字符串顺序排序的
temp = test_csv.columns.tolist()
temp.pop(0) # 去掉第一个'id'
print(temp == class_to_num.tolist())

在这里插入图片描述

读取验证集

# 读取验证集看看
csv_path = '../dog_breed_identification/sample_submission.csv'
file_path = '../dog_breed_identification/test/'
Dog_dataset = dog_dataset(csv_path, file_path, train=False)
print('第1张图片的形状、第1张图片的类别号、数据集的长度:', (Dog_dataset[0][0]).shape, Dog_dataset[0][1], len(Dog_dataset))

valid_iter = DataLoader(Dog_dataset, batch_size=128)
# 查看一下验证集上的第1张图片
X, y = next(iter(valid_iter))
# 查看验证集第1个数据。valid_iter是按原顺序读取的。
plt.imshow(torch.transpose(X[0],0,2))
print(y[0])

在这里插入图片描述

定义预测函数,预测

定义一个预测函数,返回一个List,包含了10357个预测结果(120个类别的概率分布)。

# 定义预测函数
def valid_output(valid_iter, net, device=None):
    if device is None and isinstance(net, torch.nn.Module):
        # 如果没指定device就用net的device
        device = list(net.parameters())[0].device

    with torch.no_grad():
        y_output = []
        id = []
        for X, y in valid_iter:
            # 验证集上做数据增强(normalize)
            X = X.to(device)
            net.eval() # 将模型net调成评估模式
            y_hat = torch.softmax(net(X), dim=0)
            y_hat = y_hat.cpu().tolist()
            y_output += y_hat
            id += list(y)

        return id, y_output

# 测试模式
pretrained_net.eval()

id, output = valid_output(valid_iter, pretrained_net)
print(len(output))

在这里插入图片描述


写回sample_submission.csv

# 将结果写入sample_submission.csv
with open('../dog_breed_identification/sample_submission.csv', 'w') as f:
    f.write('id,' + ','.join(class_to_num.tolist()) + '\n')
    for id, output in zip(id, output):
        f.write(id.split('.')[0] + ',' + ','.join(
            [str(num) for num in output]) + '\n')

最后将这个sample_submission.csv按要求上传即可。
Kaggle上的这个Score应该是结果的Log Loss,排名不算靠前。如果想取得好成绩可以继续修改模型和超参数进行试验,并翻阅讨论区与别人的Code分享,本文仅记录自己的图片分类解决方案供学习、记录用。
在这里插入图片描述

简单的技术点总结

  1. 根据给的数据集特点定制Dataset数据集对象。
  2. 将本地的训练集再分成训练集和测试集(很小一部分)进行训练,这样可实时查看训练效果。
  3. 数据增强:训练集上采用随机裁剪图像,所得图像为原始面积的0.08到1之间,高宽比在3/4和4/3之间,再缩放回224x224。
    再随机更改亮度,对比度和饱和度。
    使用随机水平翻转。
  4. 模型:使用表现较好的预训练过的模型,使用Resnet50,冻结模型的参数,添加一个全连接层,指定120个输出。
  5. 优化器:使用AdamW,lr=0.001,weight_decay=0.001

(本文使用代码也可参考我的 Github)

【3】Kaggle:的种类识别(VGG(11)/ResNet(18)/SENet 结构训练模型及测试完整代码)
积少成多
05-11 449
【代码】【3】Kaggle:的种类识别(VGG(11)/ResNet(18)/SENet 结构训练模型及测试完整代码)
品种识别
12-22
Kaggle竞赛中的犬种识别挑战,比赛的网址是https://www.kaggle.com/c/dog-breed-identification 在这项比赛中,尝试确定120种不同的。该比赛中使用的数据集实际上是著名的ImageNet数据集的子集。 基本思路 加载自定义数据集 微调ResNet18模型 训练模型 基于pytorch的代码 日常导入需要用到的python库 import torch import torch.nn as nn import torch.optim as optim import torchvision from torchvision import transf
深度学习实战笔记8kaggle比赛品种识别(ImageNet Dogs)
最新发布
yyyy2711的博客
08-01 1161
训练函数: 定义了一个训练函数,接受模型、训练数据迭代器、验证数据迭代器、训练轮数、学习率、权重衰减、设备列表、学习率衰减周期和衰减率作为参数。
Kaggle上的品种识别(ImageNet Dogs)
weixin_44488782的博客
02-22 5940
Kaggle上的品种识别(ImageNet Dogs) 在本节中,我们将解决Kaggle竞赛中的犬种识别挑战,比赛的网址是https://www.kaggle.com/c/dog-breed-identification 在这项比赛中,我们尝试确定120种不同的。该比赛中使用的数据集实际上是著名的ImageNet数据集的子集。 In [1]: import torch import torch...
Kaggle系列之识别品种类别(深度残差网络模型ResNet-34)
深度学习领域优质创作者,CSDN博客专家
02-21 1603
使用ResNet-34模型来识别品种,通过加载预训练模型的权重来节省空间、降低硬件配置与减少训练的时间
李沐动手学深度学习V2-实战Kaggle比赛品种识别(ImageNet Dogs)和代码实现
flyingluohaipeng的博客
05-19 4154
一. 实战Kaggle比赛品种识别(ImageNet Dogs) 1. 介绍 在这场比赛中,将识别120类不同品种,这个数据集是ImageNet的数据集子集,与 CIFAR-10数据集中的图像不同, ImageNet数据集中的图像更高更宽,且尺寸不一。比赛网址:https://www.kaggle.com/c/dog-breed-identification 比赛数据集分为训练集和测试集,分别包含RGB(彩色)通道的10222张、10357张JPEG图像。 在训练数据集中,有120种犬类,如拉布拉
kaggle-品种分类
qq_42169515的博客
07-07 708
数据集是train,test两个文件夹,所有种类的都放在一个文件夹里,我们要使用imagefolder函数就得将train文件夹分成120个子文件夹,因为共有120种类的。 【1】重建数据集 def mkdir_if_not_exist(path): if not os.path.exists(os.path.join(*path)): os.makedirs(os.path.join(*path)) 构建文件夹函数,因为每一个种类的都需新建一个文件夹。 labels = pd
沐神《动手学深度实战Kaggle比赛品种识别(ImageNet Dogs)
m0_63642362的博客
06-17 1298
沐神《动手学深度学习》飞桨版课程公开啦!hello各位飞桨的开发者,大家好!李沐老师的《动手学深度学习》飞桨版课程已经公开啦。本课程由PPSIG和飞桨工程师共同建设,将原书中MXNet框架改为飞桨实现,原理+代码实践,感兴趣的同学快速加入课程《动手学深度学习》。实战Kaggle比赛品种识别(ImageNet Dogs) 本节我们将在Kaggle实战品种识别问题。 本次(比赛网址是https://www.kaggle.com/c/dog-breed-identification)。 图13.14.1
Kaggle竞赛入门教程案例
JR_Smith1的博客
10-16 3930
Kaggle入门新手教程(房价预测案例)Kaggle房价预测竞赛链接与背景介绍竞赛代码解析导入工具包数据加载数据预处理异常值初筛插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 Kaggle房价预测 对于刚刚入门机器学习的童孩来说,如何快速地通过不同实战演练以提高代码能力和流程理解是一个需要
基于mobileNet实现品种分类(迁移学习)
冲出仁川,走出马德里,故事还会再继续
07-31 1102
品种共120种10222张训练图片train和test文件夹里面是图片labels.csv种记录着图片对应的标签值。关于mobileNet模型,这里不做过多介绍,只是迁移学习用到了,当然,你完全可以自定义网络。
kaggle数据分析项目实战视频
01-24
python数据分析入门必备,包括:数据分析思维书籍,python3数据分析实战视频,kaggle竞赛数据分析实战视频
大数据竞赛平台Kaggle案例实战
03-05
Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。 【课程内容】 机器学习算法、工具与流程概述 经济金融领域的应用 排序与CTR预估 自然语言处理类问题 能源预测与分配问题 走起-深度学习 推荐与销量预测相关问题 金融风控问题
TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN
风尘浪子
03-28 3442
卷积神经网络 CNN(Convolutional Neural Networks,ConvNet)是一种特殊的深度学习神经网络,近年来在物体识别、图像重绘、视频分析等多个层面得到了广泛的应用。本文将介绍 CNN 卷积神经网络的基本原理和基础概念,卷积层与池化层的作用,并以常用的 VGG16 为例子,介绍常用模型的使用方式。把中间激活层输出图,滤波器,热力图等进行可视化分析,让大家进一步了解 CNN 的结构特征。
python数据分析实战之超市零售分析
热门推荐
恋恋风尘的博客
05-17 2万+
文章目录1、明确需求和目的2、数据收集3、数据预处理3.1 数据整合3.1.1 加载相关库和数据集3.1.2 数据概览3.2 数据清洗3.2.1 列名重命名3.2.2 数据类型处理3.2.3 缺失值处理3.2.4 异常值处理3.2.5 重复值处理4、数据分析4.1 整体销售情况分析4.1.1 销售额分析4.1.2 销量分析4.1.3 利润分析4.1.4 客单价分析4.1.5 市场布局分析4.2 商品情况分析4.3 用户情况分析4.3.1 不同类型的客户占比4.3.2 客户下单行为分析4.3.3 RFM模型
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
杨秀璋的专栏
11-01 1万+
这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Web渗透的第一步工作,涉及网站信息、域名信息、端口信息、敏感信息及指纹信息收集。这篇文章换个口味,将分享机器学习在安全领域的应用,并复现一个基于机器学习(逻辑回归)的恶意请求识别
Kaggle实战1-机器学习算法与流程概述 + house-price example
黑洲非人lyf
06-24 1683
参考链接:https://blog.csdn.net/han_xiaoyang/article/details/50469334    机器学习问题解决思路 上面带着代价走马观花过了一遍机器学习的若干算法,下面我们试着总结总结在拿到一个实际问题的时候,如果着手使用机器学习算法去解决问题,其中的一些注意点以及核心思路。主要包括以下内容: 拿到数据后怎么了解数据(可视化) 选择最贴切的机器学...
kaggle项目实战:人脸特征检测
mdjxy63的博客
01-01 3320
这个主要参考《深度学习——caffe之经典模型详解与实战kaggle比赛链接:https://www.kaggle.com/c/facial-keypoints-detection 数据格式描述:由于下载下来的文件是csv格式的文件,caffe并不支持, step1:因此需要通过csv->DataFrame->numpy.Array->hdf5 将csv转化为hdf5格式的
Kaggle实战记录01】Titanic - Machine Learning
SC_Linno的博客
04-07 431
title : 【Kaggle实战记录01】Titanic - Machine Learning from Disastertags : 机器学习,练习记录
PyTorch入门:实战Kaggle图像识别
首先,文章强调了数据在深度学习中的关键地位,作者提到项目所使用的数据集包含25000张猫图片,分为训练集(12500张猫和12500张)和测试集,图片尺寸和姿势各异。为了进行有效的训练,需要对图片进行预处理,如...
写文章

热门文章

  • Ubuntu22.04安装CUDA、cudnn详细步骤 24144
  • Windows10下安装Ubuntu22.04(打造双系统)步骤 + 安装Nvidia显卡驱动 12982
  • 【ROS学习笔记】3.(理论)什么是ROS以及一些核心概念 11173
  • 【Pytorch学习笔记】11.取Dataset的子集、给Dataset打乱顺序的方法(使用Subset、random_split) 9417
  • RTX3060(30系显卡)Windows10部署Pytorch深度学习环境步骤与心得 9007

分类专栏

  • 有趣的Graph Data Science应用 2篇
  • 数据处理、可视化 1篇
  • 深度学习实战 8篇
  • 深度学习开发环境 8篇
  • ROS学习笔记 23篇
  • Pytorch学习笔记 15篇
  • 论文阅读笔记 6篇
  • 凸优化学习笔记 3篇
  • 数据库和SQL学习笔记 10篇
  • tensorflow学习笔记 2篇
  • Dofbot机械臂学习笔记 7篇
  • 数据结构与算法(Python版)学习笔记 1篇

最新评论

  • 【ROS学习笔记】11.服务数据(srv)的定义与使用

    qioqio12138: 捉个虫,建好头文件后,写的还是在learning_topic/下找到相应的头文件,应该是learning_service/

  • 【ROS学习笔记】6.发布者Publisher的编程实现(C++和Python)

    LKjoey: 有用,python版海龟终于跑起来,为你点赞

  • 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

    微曜658: 你是我滴神!!!

  • 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

    微曜658: 请问这个数据集是免费的吗

  • 【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)

    m0_51587146: 请问学习率调这么低如何直觉上理解呢,我刚刚入门 调lr=0.1试了一下 accuracy低的可怜 不到0.1 之前在学习的过程中,没有见过这么低的lr,是什么操作会经验性的这么设置呢 数据增强 还是Resnet

最新文章

  • 正确使用Pytorch Geometric打开Cora(Planetoid)数据集
  • 【图论应用】使用多路图(multigraph)对上海地铁站点图建模,并解决最短路径问题
  • 【pandas】对整个DataFrame使用apply方法及一些注意事项(设置axis,空值陷阱,获取index列信息)
2024年3篇
2023年11篇
2022年60篇
2021年1篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王巴中企业网站优化深入理解网站优化 pdf沙田五金网站优化怎么样莲湖网站关键词优化排名莱山区品牌网站优化泸州网站优化方法网站做关键词优化有用吗群发自动优化网站简述网站优化的作用网站优化课程故事夏天网站优化上海网站做优化一般几个字明城网站优化维护服务好的网站设计优化放心选择黄浦区谷歌网站优化排名九度网站优化软件武汉整站网站优化平台双鸭山服务好的网站优化优化网站出色火4星口碑好的网站搜索优化公司做优化的网站建设阳江网站搜索引擎优化竞价代码怎么优化成网站福田自己网站优化服务如何外贸网站seo博客优化衡东网站优化南京智能化网站优化联系人优化产品页的网站绵阳网站综合优化乐山网站优化排名香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化