热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyTorch实现卷积和池化(kaggle环境)

importnumpyasnpimporttorchfromtorchimportnnfromtorch.autogradimportVariablefromPILimpo

import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
from PIL import Image
import matplotlib.pylab as plt
%matplotlib inline

卷积层


导入图片并且转化为灰度图


kaggle环境中所有本地数据都有上传才能加载!

im = Image.open('../input/cat.jpg').convert('L')

将图片转化为矩阵

im = np.array(im, dtype='float32')

查看图片,将图片矩阵转化为uint8类型,uint8是无符号八位整型,表示范围是[0, 255]的整数,colormap为gray

plt.imshow(im.astype('uint8'), cmap='gray')


在这里插入图片描述

im.shape

(121, 121)

将图片矩阵转化为Tensor,并将图片大小转化为卷积输入的要求大小

print(im.shape)
im = torch.from_numpy(im.reshape(1,1,im.shape[0], im.shape[1]))
print(im.shape)

(121, 121)
torch.Size([1, 1, 121, 121])

使用nn.Conv2d定义卷积层。参数:输入通道数,输出通道数,kernel大小,偏置为0

conv1 = nn.Conv2d(1, 1, 3,bias=False)

定义kernel矩阵内容,为3X3矩阵,中间为8,其余为-1

sobel_kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]],dtype='float32')
print(sobel_kernel.shape)

(3, 3)

将卷积核大小设置与卷积层通道相一致

sobel_kernel = sobel_kernel.reshape((1,1,3,3))
print(sobel_kernel.shape)

(1, 1, 3, 3)

将定义好得卷积核转化为Tensor,并赋值给卷积层权重

conv1.weight.data = torch.from_numpy(sobel_kernel)

使用卷积层对图片进行卷积

edge1 = conv1(Variable(im))
print(edge1.shape)

torch.Size([1, 1, 119, 119])

用函数squeeze去掉卷积操作后的其他为1的维数,并且将Tensor转化为numpy

print(edge1.data.squeeze().shape)
edge1 = edge1.data.squeeze().numpy()

torch.Size([119, 119])

将经过卷积后的图片显示出来

plt.imshow(edge1,cmap='gray')


在这里插入图片描述


池化层


导入最大池化层,并定义池化大小

pool1 = nn.MaxPool2d(2, 2)

打印出张量格式的图片大小

print('before max pool, image shape: {} x {}'.format(im.shape[2], im.shape[3]))

before max pool, image shape: 121 x 121

将Tensor转化为Variable,进行最大池化操作。并将结果转化为numpy

small_im1 = pool1(Variable(im))
small_im1 = small_im1.data.squeeze().numpy()

打印出经过池化层后的图片大小

print('after max pool, image shape: {} X {}'.format(small_im1.shape[0],small_im1.shape[1]))

after max pool, image shape: 60 X 60

打印出图片

plt.imshow(small_im1,cmap='gray')


在这里插入图片描述


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Python实现Redis订阅发布功能
    本文介绍了使用Python实现Redis订阅发布功能的方法,包括创建RedisHelper类、发布消息和订阅消息的操作。通过该功能,可以实现消息的发布和订阅,并在程序中进行相应的处理。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
author-avatar
diuhunpo_813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有