美文网首页
神经网络学习之Ndarray对象和CNN入门

神经网络学习之Ndarray对象和CNN入门

作者: 无情剑客Burning | 来源:发表于2021-02-09 22:33 被阅读0次

    人类和蚂蚁

    人类和蚂蚁应该是理解维度很好的参照,对人类而言,世界是三维的,而对于蚂蚁来说,世界是二位的,让蚂蚁来理解三维的东西肯定不好理解,让人类类理解高于三维的东西,那必然也不容易理解,但Ndarray对象居然可以是任意的维度,其实现本质上基于的是多维数组。

    Jupyter

    (1)通过官网安装,anaconda官网: https://anaconda.org/ (2)通过conda install jupyter来安装Jupyter。 Conda真是一个好东西,用上它就会爱上它,现在我基本不用pip来安装软件包了,基本都是用conda进行安装。 区别: 简单理解conda会安装所有依赖包,这能省很多事情的 (3)运行jupyter notebook即可启动服务

    在这里插入图片描述

    很人性化的web界面,自己探索下就知道怎么使用了,总之很强大。在其他的语言中可没有这等神器。

    Numpy

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

    NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

    NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

    一个强大的N维数组对象 ndarray•广播功能函数•整合 C/C++/Fortran 代码的工具•线性代数、傅里叶变换、随机数生成等功能

    本文主要来书ndarray,其他的特性会在后续文章中介绍。

    Numpy的常用操作可参考下面的导图: 在这里插入图片描述

    Ndarray

    下面这段代码获取的是文本训练集和测试集,然后通过CNN对其进行文本分类。后续文章会专门讲解CNN,这个神奇的网络让我爱上了深度学习。

    (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
    
    感受一下CNN是个什么东西: 在这里插入图片描述 来看一下结果: 在这里插入图片描述

    从图中可以看出测试集和训练集都是ndarray类型的。

    Ndarray是什么

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

    Ndarray 对象是用于存放同类型元素的多维数组

    Ndarray 中的每个元素在内存中都有相同存储大小的区域。

    Ndarray 内部由以下内容组成:

    一个指向数据(内存或内存映射文件中的一块数据)的指针。

    数据类型或 dtype,描述在数组中的固定大小值的格子。 •

    一个表示数组形状(shape)的元组,表示各维度大小的元组。 •

    一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

    Ndarray 的内部结构: 在这里插入图片描述

    Ndarray属性

    在上面的导图中,介绍了主要的属性,不过这个图对shape属性和ndim属性的说明不太准确。因此这是引用官网的文档: 属性 | 注释 -------- | ----- |ndarray.flags| Information about the memory layout of the array.| |ndarray.shape|Tuple of array dimensions.| |ndarray.strides|Tuple of bytes to step in each dimension when traversing an array.| |ndarray.ndim|Number of array dimensions.| |ndarray.data|Python buffer object pointing to the start of the array’s data.| |ndarray.size|Number of elements in the array. |ndarray.itemsize|Length of one array element in bytes.| | ndarray.nbytes | Total bytes consumed by the elements of the array. | | ndarray.base | Base object if memory is from some other object.|

    通过例子来看一下:

    a = np.arange(24)  print (a.ndim)             # a 现只有一个维度# 现在调整其大小b = a.reshape(2,4,3)  # b 现在拥有三个维度print(b)print(b.ndim)print(b.shape)
    
    运行结果: 在这里插入图片描述

    首先看b的shape的属性是一个tuple,和list很像,不过元素不能改变

    这其中的(2, 3, 4)都代表什么?这和ndim属性又有什么关系那?再次reshape一次。

    b = a.reshape(6,4)b
    
    在这里插入图片描述

    似乎发现了什么。通过对比可知,shape对应的tuple的长度就是ndim属性,也就是"Number of array dimensions"。

    再看b.shape对用的tuple中的元素都代表什么? 对以第二次reshape后的b,可知:

    6代表的是二维数组中一维数组的个数4代表的是一维数组中元素的个数

    如果我想搞个6维的数组,

    在这里插入图片描述

    Ndarray索引和切片

    #切片还可以包括省略号 …/:,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。a = np.array([[1,2,3],[3,4,5],[4,5,6]])  print(a)# 返回一个元组print(a.shape)# 轴个数print(a.ndim)print (a[...,1])   # 第2列元素print(a[:,1])print (a[1,...])   # 第2行元素print (a[...,1:])  # 第2列及剩下的所有元素
    

    运行结果如下:

    [[1 2 3] [3 4 5] [4 5 6]] (3, 3) 2 [2 4 5] [2 4 5] [3 4 5] [[2 3] [4 5] [5 6]]

    图像的conv2d

    创建两个7x7的滤波器。其中一个在中间带有垂直白线,另一个在中间带有水平白线。

    #!/usr/bin/env python# coding: utf-8# In[108]:import numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltfrom sklearn.datasets import load_sample_image# In[126]:china = load_sample_image("china.jpg")/255flower = load_sample_image("flower.jpg")/255images = np.array([china,flower])# In[134]:print(images.ndim)batch_size, height, width, chanels = images.shape# In[135]:filters = np.zeros(shape=(7,7,chanels,2), dtype=np.float32)filters# In[141]:filters[:,3,:,0] = 1filters[3,:,:,1] = 1filtersoutputs = tf.nn.conv2d(images, filters, strides=1, padding="SAME")plt.imshow(outputs[0,:,:,1], cmap="gray")plt.show()
    
    看一下经过卷积之后的特征图(feature map): 在这里插入图片描述

    如果想获得第一个滤波器卷积得到的特征图,需要用下面的代码:

    plt.imshow(outputs[0,:,:,0], cmap="gray")
    
    结构如下: 在这里插入图片描述

    参考

    https://www.runoob.com/numpy/numpy-matplotlib.html•机器学习实战•https://numpy.org/

    写在最后

    接下来的文章会介绍Ndarray的内存布局,以及tensorflow中重要的数据结构。

    公众号

    更多机器学习相关的内容,欢迎关注我的微信公众号: 无情剑客。


    burning_gzh.png

    相关文章

      网友评论

          本文标题:神经网络学习之Ndarray对象和CNN入门

          本文链接:https://www.haomeiwen.com/subject/cyxhxltx.html