最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)之Ndarray對象和CNN入門

2021-02-09 22:28 作者:無情劍客Burning  | 我要投稿

人類和螞蟻

人類和螞蟻應(yīng)該是理解維度很好的參照,對人類而言,世界是三維的,而對于螞蟻來說,世界是二位的,讓螞蟻來理解三維的東西肯定不好理解,讓人類類理解高于三維的東西,那必然也不容易理解,但Ndarray對象居然可以是任意的維度,其實現(xiàn)本質(zhì)上基于的是多維數(shù)組。

Jupyter

(1)通過官網(wǎng)安裝,anaconda官網(wǎng): https://anaconda.org/ (2)通過conda install jupyter來安裝Jupyter。 Conda真是一個好東西,用上它就會愛上它,現(xiàn)在我基本不用pip來安裝軟件包了,基本都是用conda進(jìn)行安裝。 區(qū)別:?簡單理解conda會安裝所有依賴包,這能省很多事情的?(3)運行jupyter notebook即可啟動服務(wù)

很人性化的web界面,自己探索下就知道怎么使用了,總之很強大。在其他的語言中可沒有這等神器。

Numpy

NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學(xué)函數(shù)庫。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 與其它協(xié)作者共同開發(fā),2005 年,Travis Oliphant 在 Numeric 中結(jié)合了另一個同性質(zhì)的程序庫 Numarray 的特色,并加入了其它擴展而開發(fā)了 NumPy。NumPy 為開放源代碼并且由許多協(xié)作者共同維護(hù)開發(fā)。

NumPy 是一個運行速度非??斓臄?shù)學(xué)庫,主要用于數(shù)組計算,包含:

?一個強大的N維數(shù)組對象 ndarray?廣播功能函數(shù)?整合 C/C++/Fortran 代碼的工具?線性代數(shù)、傅里葉變換、隨機數(shù)生成等功能

本文主要來書ndarray,其他的特性會在后續(xù)文章中介紹。

Numpy的常用操作可參考下面的導(dǎo)圖:

Ndarray

下面這段代碼獲取的是文本訓(xùn)練集和測試集,然后通過CNN對其進(jìn)行文本分類。后續(xù)文章會專門講解CNN,這個神奇的網(wǎng)絡(luò)讓我愛上了深度學(xué)習(xí)。

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)

感受一下CNN是個什么東西:

來看一下結(jié)果:

從圖中可以看出測試集和訓(xùn)練集都是ndarray類型的。

Ndarray是什么

NumPy 最重要的一個特點是其 N 維數(shù)組對象 ndarray,它是一系列同類型數(shù)據(jù)的集合,以 0 下標(biāo)為開始進(jìn)行集合中元素的索引。

Ndarray 對象是用于存放同類型元素的多維數(shù)組

Ndarray 中的每個元素在內(nèi)存中都有相同存儲大小的區(qū)域。

Ndarray 內(nèi)部由以下內(nèi)容組成:

?

一個指向數(shù)據(jù)(內(nèi)存或內(nèi)存映射文件中的一塊數(shù)據(jù))的指針。

?

數(shù)據(jù)類型或 dtype,描述在數(shù)組中的固定大小值的格子。

?

一個表示數(shù)組形狀(shape)的元組,表示各維度大小的元組

?

一個跨度元組(stride),其中的整數(shù)指的是為了前進(jìn)到當(dāng)前維度下一個元素需要"跨過"的字節(jié)數(shù)。

Ndarray 的內(nèi)部結(jié)構(gòu):

Ndarray屬性

在上面的導(dǎo)圖中,介紹了主要的屬性,不過這個圖對shape屬性和ndim屬性的說明不太準(zhǔn)確。因此這是引用官網(wǎng)的文檔: 屬性 | 注釋 -------- | ----- |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 現(xiàn)只有一個維度
# 現(xiàn)在調(diào)整其大小
b = a.reshape(2,4,3) ?# b 現(xiàn)在擁有三個維度
print(b)
print(b.ndim)
print(b.shape)

運行結(jié)果:

首先看b的shape的屬性是一個tuple,和list很像,不過元素不能改變。

這其中的(2, 3, 4)都代表什么?這和ndim屬性又有什么關(guān)系那?再次reshape一次。

b = a.reshape(6,4)
b

似乎發(fā)現(xiàn)了什么。通過對比可知,shape對應(yīng)的tuple的長度就是ndim屬性,也就是"Number of array dimensions"。

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

?6代表的是二維數(shù)組中一維數(shù)組的個數(shù)?4代表的是一維數(shù)組中元素的個數(shù)

如果我想搞個6維的數(shù)組,

Ndarray索引和切片

#切片還可以包括省略號 …/:,來使選擇元組的長度與數(shù)組的維度相同。 如果在行位置使用省略號,它將返回包含行中元素的 ndarray。
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) ?
print(a)
# 返回一個元組
print(a.shape)
# 軸個數(shù)
print(a.ndim)
print (a[...,1]) ? # 第2列元素
print(a[:,1])
print (a[1,...]) ? # 第2行元素
print (a[...,1:]) ?# 第2列及剩下的所有元素

運行結(jié)果如下:

[[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

創(chuàng)建兩個7x7的濾波器。其中一個在中間帶有垂直白線,另一個在中間帶有水平白線。

#!/usr/bin/env python
# coding: utf-8

# In[108]:


import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.datasets import load_sample_image


# In[126]:


china = load_sample_image("china.jpg")/255
flower = load_sample_image("flower.jpg")/255

images = 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] = 1
filters[3,:,:,1] = 1
filters
outputs = tf.nn.conv2d(images, filters, strides=1, padding="SAME")
plt.imshow(outputs[0,:,:,1], cmap="gray")
plt.show()

看一下經(jīng)過卷積之后的特征圖(feature map):

如果想獲得第一個濾波器卷積得到的特征圖,需要用下面的代碼:

plt.imshow(outputs[0,:,:,0], cmap="gray")

結(jié)構(gòu)如下:

參考

?https://www.runoob.com/numpy/numpy-matplotlib.html?機器學(xué)習(xí)實戰(zhàn)?https://numpy.org/

寫在最后

接下來的文章會介紹Ndarray的內(nèi)存布局,以及tensorflow中重要的數(shù)據(jù)結(jié)構(gòu)。

公眾號

更多機器學(xué)習(xí)相關(guān)的內(nèi)容,歡迎關(guān)注我的微信公眾號: 無情劍客。


神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)之Ndarray對象和CNN入門的評論 (共 條)

分享到微博請遵守國家法律
合作市| 河津市| 兴文县| 乌兰县| 彝良县| 武宣县| 阿巴嘎旗| 县级市| 横峰县| 芮城县| 江孜县| 石河子市| 得荣县| 永吉县| 伊宁市| 桃源县| 迁西县| 谷城县| 都昌县| 扶风县| 成武县| 柯坪县| 宝应县| 芦溪县| 盐津县| 浠水县| 司法| 肃南| 德安县| 鸡西市| 托里县| 丰宁| 安平县| 利川市| 长垣县| 连州市| 连南| 天等县| 建瓯市| 营山县| 樟树市|