主頁 >  其他 > 【神經網路與深度學習-TensorFlow實踐】-中國大學MOOC課程(七)(數字影像基礎))

【神經網路與深度學習-TensorFlow實踐】-中國大學MOOC課程(七)(數字影像基礎))

2021-11-07 07:25:20 其他

【神經網路與深度學習-TensorFlow實踐】-中國大學MOOC課程(七)(數字影像基礎)

  • 第7講 數字影像基礎
    • 7.1 數字影像基本概念
      • 7.1.1 影像的離散化
        • 7.1.1.1 連續影像和數字影像
        • 7.1.1.2 像素、位圖、色彩深度/位深度、BMP格式
        • 7.1.1.3 色彩模式
          • 7.1.1.3.1 二值影像(Binary Image)
          • 7.1.1.3.2 灰度影像(Gray Image)
          • 7.1.1.3.3 彩色影像(RGB)
          • 7.1.1.3.4 RGBA影像
          • 7.1.1.3.5 256色彩色影像
          • 7.1.1.3.6 CMYK-印刷四粉色
          • 7.1.1.3.7 YCbCr
          • 7.1.1.3.8 HSI 色彩模型
        • 7.1.1.4 影像格式
        • 7.1.1.5 影像壓縮
        • 7.1.1.5.1 JPEG格式
        • 7.1.1.5.2 PNG格式(Portable Network Graphics,PNG)
        • 7.1.1.5.3 GIF格式(Graphics Interchange Format)
        • 7.1.1.5.4 TIFF格式(Tag Image File Format)
        • 7.1.1.6 影像型別
          • 7.1.1.6.1 平面二維影像
          • 7.1.1.6.2 序列影像
          • 7.1.1.6.3 深度影像(Depth Map):
    • 7.2 Pillow影像處理庫
      • 7.2.1 一些影像處理庫
        • 7.2.1.1 matplotlib.image方式
        • 7.2.1.2 PIL(Python Imaging Library)
      • 7.2.2 Pillow庫
        • 7.2.2.1 安裝和匯入包/模塊
          • 7.2.2.1.1 Pillow的安裝
          • 7.2.2.1.2 匯入PIL.image模塊
          • 7.2.2.1.3 匯入matplotlib.pyplot模塊
        • 7.2.2.2 打開影像--Image.open()函式
        • 7.2.2.3 保存影像-save()方法
        • 7.2.2.4 影像物件的主要屬性
        • 7.2.2.5 顯示影像
        • 7.2.2.6 分別顯示不同類別的影像
        • 7.2.2.7 轉換影像的色彩模式
        • 7.2.2.8 顏色通道的分離與合并
        • 7.2.2.9 轉化為陣列
          • 7.2.2.9.1 將灰度影像lena_gray.bmp轉化為陣列(反色)
        • 7.2.2.10 對影像的縮放、旋轉和鏡像
          • 7.2.2.10.1 縮放影像
          • 7.2.2.10.1.1 img.resize()方法
          • 7.2.2.10.1.2 img.thumbnail()方法
          • 7.2.2.10.2 旋轉、鏡像(即左右翻轉)
        • 7.2.2.11 裁剪影像
      • 7.2.3 常用的影像處理庫
    • 7.3 實體:手寫數字資料集MNIST
      • 7.3.1 影像操作匯總表
      • 7.3.2 MNIST資料集
        • 7.3.2.1 下載MNIST資料集
        • 7.3.2.2 輸出訓練集和測驗集的長度
        • 7.3.2.3 輸出影像資料和標記資料的形狀
        • 7.3.2.4 顯示手寫數字圖片
          • 7.3.2.4.1 輸出資料集中的第1個樣本
          • 7.3.2.4.2 顯示圖片
          • 7.3.2.4.3 隨機顯示4幅手寫數字圖片
      • 7.3.3 習題及相關庫補充(未作,有時間寫)

第7講 數字影像基礎

7.1 數字影像基本概念

  • 有人說:計算機視覺是人工智能的大門(我不信),倒是一道門
  • 計算機視覺成為人工智能應用方面的領頭羊
  • 本課實體都是與影像有關的

7.1.1 影像的離散化

7.1.1.1 連續影像和數字影像

  • 連續影像:人眼直接感受到的影像
  • 數字影像:把連續的影像數字化、離散化之后的影像,它是對連續影像的一種近似

7.1.1.2 像素、位圖、色彩深度/位深度、BMP格式

影像是如何被離散化的?

  • 像素(pixel):是影像中的一個最小單位
  • 位圖(bitmap):通過記錄每一個像素值來存盤和表達的影像
  • 色彩深度/位深度:位圖中每個像素點要用多少個二進制位來表示
  • BMP格式:Windows系統的標準位圖格式,他能夠很好的兼容各種windows程式
    可以通過windows圖片屬性查看位深度,決定存盤的位元組數,這里稱為24位真彩色
    在這里插入圖片描述

7.1.1.3 色彩模式

為什么稱為真彩色,除了24位,還有那些喃?

7.1.1.3.1 二值影像(Binary Image)
  1. 每個像素只有2種可能的取值,使用1位二進制來表示,位深度為1;最簡單的影像表示方式
    在這里插入圖片描述
  2. 在影像處理和分析時,常常首先對影像進行二值化處理
    凸顯出感興趣的目標,有效的減少資料量
  3. 只要是僅有兩種顏色的影像,都可以被稱為二進制影像
7.1.1.3.2 灰度影像(Gray Image)
  • 每個像素使用1個位元組表示,位深度為8,可以表示256種級別的灰度;
  • 0表示黑色;255表示白色 ;1-254表示不同級別的灰色
  • 其他任何一種單一顏色不同亮度的影像都可以稱為灰度影像
    在這里插入圖片描述
7.1.1.3.3 彩色影像(RGB)
  • 每個像素都有紅(R)、綠(G)、藍(B)三個分量
  • 1個像素點使用3個位元組,位深度為24位
  • 可以表示256×256×256=16777216種顏色
  • 對于人眼,已經可以反映出真實世界,所以稱為24位真彩色
  • 通常講RGB三種分量稱為通道,如紅色通道
    在這里插入圖片描述
7.1.1.3.4 RGBA影像
  • RGB影像+8位透明度資訊Alpha
  • 這個透明度稱為透明度通道,或者Alpha通道

在這里插入圖片描述

7.1.1.3.5 256色彩色影像
  • 每個像素用8位二進制表示,是調色版中的索引值
  • 二進制數并不代表確定的顏色,而是調色板中的索引值,對應的顏色是按照索引值在調色板中查詢出來的
  • 對于不同的影像,所對應的這256種顏色的集合是不一樣的
  • 在保存和加載這種型別的位圖時,需要將調色板和影像一同保存和加載
7.1.1.3.6 CMYK-印刷四粉色
  • 每個像素用32位二進制表示
  1. C:Cyan = 青色
  2. M:Magenta = 洋紅色
  3. Y:Yellow = 黃色
  4. K:black = 黑色
7.1.1.3.7 YCbCr
  • 是DVD、攝像機、數字電視等消費類視頻產品中色彩編碼方案
  1. Y:亮度分量
  2. Cb:藍色亮度分量
  3. Cr:紅色亮度分量
7.1.1.3.8 HSI 色彩模型
  • 用H、S、I三個分量來描述
  1. H:色調
  2. S:飽和度
  3. I:亮度

7.1.1.4 影像格式

  • BMP格式:占用存盤空間大,不支持檔案壓縮,不適用于網頁

7.1.1.5 影像壓縮

  • 適當降低影像質量減小它所占用的空間
  • 不同的影像壓縮演算法,對應不同得影像格式

7.1.1.5.1 JPEG格式

  • 它是一種有損壓縮方案
  • 可以在保證高質量得前提下去除冗余的色彩和影像資料
  • 壓縮率高,所占空間小
  • 可以壓縮到原圖的1/20大小,而圖片的質量不會有明顯的下降,非常適合存盤照片以及在網頁中顯示照片
  • 適合于色彩豐富、細節清晰細膩得大影像
  • 不適合所含顏色較少,具有大塊顏色相近得區域,或亮度差異十分明顯的簡單圖片
  • 每次編輯都會降低影像質量,不適合需要進行多次編輯的情況

7.1.1.5.2 PNG格式(Portable Network Graphics,PNG)

  • 無損壓縮,對影像本身質量的減損非常低,逐漸流行起來
  • 適合于有規律漸變色彩的影像
  • 對于色彩豐富,細節清晰細膩的大圖表現效果不如JPEG格式

7.1.1.5.3 GIF格式(Graphics Interchange Format)

  • 支持靜態格式動態格式
  • 靜態格式于JPEG格式的圖片類似
  • 動態圖片由多幅圖片保存為一個圖片,回圈顯示,形成影片效果
  • 只支持256色,適用于色彩簡單、顏色較少的小影像

7.1.1.5.4 TIFF格式(Tag Image File Format)

  • 是最復雜的一種影像格式
  • 定義了4類不同型別的格式
  1. 二值影像(TIFF-B)
  2. 黑白灰度影像(TIFF-G)
  3. 帶調色板的彩色影像(TIFF-P)
  4. RGB真彩影像(TIFF-R)
  • 支持RGB、JPEG等多種編碼方法
  • 具有非常好的擴展性、方便性、可改性,是印刷行業中最常用的格式
  • Web瀏覽器不支持TIFF格式

7.1.1.6 影像型別

7.1.1.6.1 平面二維影像
  • 前面介紹的所有影像都是平面二維影像
7.1.1.6.2 序列影像
  • 序列影像時間上有一定順序間隔、內容上相關的一組影像
  1. 視頻影像就是一種特殊的序列影像
  2. 其中的每幅影像稱為幀影像
  3. 幀影像之間的時間間隔是固定的
7.1.1.6.3 深度影像(Depth Map):
  • 是一種三維場景資訊的表達方式
  • 每個像素點的取值,代表這個點離攝像機的距離
  • 采用灰度圖表示,每個像素點由一個位元組表示
  • 深度影像中,像素點的取值并不代表實際的距離,顏色的深淺只是代表相對距離的遠近

7.2 Pillow影像處理庫

上節回顧

  • 位圖:通過記錄每一個像素的顏色值,來存盤和表達影像
  • 影像格式:BMP、JPEG、PNG、GIF、TIFF
  • 色彩模式:二值影像、灰度影像、RGB影像、RGBA影像、256色影像、CMYK、YCbCr、HSI

7.2.1 一些影像處理庫

7.2.1.1 matplotlib.image方式

  • 僅支持匯入PBG格式的影像,且功能有限

7.2.1.2 PIL(Python Imaging Library)

  • 功能豐富,且簡單易用
  • 但是僅支持Python2.x版本,且已經停止更新

7.2.2 Pillow庫

  • 在PIL的基礎上發展而成的兼容版本
  • 支持python 3

7.2.2.1 安裝和匯入包/模塊

7.2.2.1.1 Pillow的安裝
  • 使用Anaconda已經安裝好
  • 使用pip命令安裝
pip install pillow
7.2.2.1.2 匯入PIL.image模塊
  • pillow的核心仍是PIL,所以在使用之前仍要匯入PIL中image模塊
from PIL import Image
  • iamge模塊中有一個image類,通過image類的函式和方法和屬性完成對影像的讀取、顯示和簡單的操作
7.2.2.1.3 匯入matplotlib.pyplot模塊
  • 要使用matplotlib.pyplot來顯示圖片
import matplotlib.pyplot as plt

7.2.2.2 打開影像–Image.open()函式

Image.open(路徑)# 回傳image物件

有一個經常使用的影像叫做lena.tiff可以在網上下載,網址為http://www.lenna.org/
然后可以在該檔案目錄下打開

img = Image.open('lena.tiff')

得到影像物件img

7.2.2.3 保存影像-save()方法

影像物件.save(檔案路徑)
  • 引數是被保存的檔案路徑
  • 對于上述lena.tiff圖片就是
img.save('test.tiff')
  • save()方法不僅能夠保存影像,還可以改變檔案名的后綴,就可以轉換影像格式
img.save('lena.jpg') # 將原圖存盤為jpg格式
img.save('lena.bmp') # 將原圖存盤為bpm格式

7.2.2.4 影像物件的主要屬性

屬性說明
影像物件.format影像格式
影像物件.size影像尺寸
影像物件.mode色彩模式

例如:

>>> from PIL import Image 
>>> import matplotlib.pyplot as plt

>>> img = Image.open('lena.tiff') 
>>> img.save('test.tiff') 
>>> img.save('test.jpg')  
>>> img.save('test.bmp') 
>>> img1 = Image.open("test.jpg") 
>>> img2 = Image.open("test.bmp") 


>>> print("image:",img.format) 
image: TIFF
>>> print("image1:",img1.format) 
image1: JPEG
>>> print("image2:",img2.format) 
image2: BMP



>>> print("size:",img.size) 
size: (512, 512)
>>> print("mode:",img.mode) 
mode: RGB

7.2.2.5 顯示影像

*可以使用matpltlib.pyplot模塊中的 imshow()函式show()函式顯示影像

  • **plt.figure()**首先創建畫布
  • **imshow()**函式負責對影像進行處理,并且顯示它的格式
  1. 引數cmap=“gray”;意思是影像都是以灰度影像顯示的
plt.imshow(image物件/Numpy陣列) 
  • 然后呼叫**show()**函式顯示出來
>>> plt.figure(figsize=(5,5))
<Figure size 500x500 with 0 Axes>
>>> plt.imshow(img)   
<matplotlib.image.AxesImage object at 0x0000022508D1B908>
>>> plt.show()

運行結果為:
請添加圖片描述

7.2.2.6 分別顯示不同類別的影像

from PIL import Image 
import matplotlib.pyplot as plt

img = Image.open('lena.tiff') 
img.save('test.tiff') 
img.save('test.jpg')
img.save('test.bmp')
img = Image.open("test.tiff")
img1 = Image.open("test.jpg")
img2 = Image.open("test.bmp")

plt.figure(figsize=(15,5))

plt.subplot(131)
plt.axis("off")
plt.imshow(img)
plt.title(img.format)

plt.subplot(132)
plt.axis("off")
plt.imshow(img1)
plt.title(img1.format)

plt.subplot(133)
plt.axis("off")
plt.imshow(img2)
plt.title(img2.format)

plt.show()

結果輸出為:
請添加圖片描述

7.2.2.7 轉換影像的色彩模式

取值色彩模式
1二值影像(每個像素8位二進制)
L灰度影像
P8位彩色影像
RGB24位彩色影像
RGBA32位彩色影像
CMYKCMYK彩色影像
YCbCrYCbCr彩色影像
I32位整型灰度影像
F32位浮點灰度影像
影像物件.convert(色彩模式)

例如:

img_gray = img.convert("L")
print("mode=",img_gray.mode)

plt.figure(figsize=(5,5))
plt.imshow(img_gray)
plt.show()

輸出結果為:
請添加圖片描述
本來我尋思著為啥我這個還帶點青色,難道我運行錯了,本來想留著這個疑問,但是當我存盤以后,發現是這樣的:
請添加圖片描述

還可以使用save()方法將其存盤為新的檔案

img_gray.save("lena_gray.bmp")
  • 雖然使用convert()函式也可以把灰度影像轉換為彩色影像,但是實際上很難恢復到原來的樣子

7.2.2.8 顏色通道的分離與合并

影像物件.split()
Image.merge(色彩模式,影像串列)

例如:

from PIL import Image 
import matplotlib.pyplot as plt

img = Image.open('lena.tiff') 
img_r,img_g,img_b = img.split()

plt.figure(figsize=(8,8))

plt.subplot(221)
plt.axis("off")
plt.imshow(img_r,cmap="gray")# cmap是以灰度的方式顯示
plt.title("R",fontsize=20)

plt.subplot(222)
plt.axis("off")
plt.imshow(img_g,cmap="gray")
plt.title("G",fontsize=20)

plt.subplot(223)
plt.axis("off")
plt.imshow(img_b,cmap="gray")
plt.title("B",fontsize=20)

img_rgb = Image.merge("RGB",[img_r,img_g,img_b])
# 使用merge方法將所有的通道合并
plt.subplot(224)
plt.axis("off")
plt.imshow(img_rgb)
plt.title("RGB",fontsize=20)

plt.show()

輸出結果為:
請添加圖片描述

  • RGB通道采用灰度圖表示顏色的亮度,R圖R通道中中,顏色越淺,表示紅色越亮,顏色越深,表示紅色越暗

7.2.2.9 轉化為陣列

  • 計算機處理圖象時,有時候會先把轉化為陣列
  • 陣列中的元素對應像素中的各個像素點,然后再逐像素的進行計算和處理
  • 將影像物件轉化為numpy陣列
np.array(影像物件)
import numpy as np
arr_img = np.array(img)
print("shape:",arr_img.shape,"\n")
print(arr_img)

輸出結果為

shape: (512, 512, 3)

[[[226 137 125]
  [226 137 125]
  [223 137 133]
  ...
  [230 148 122]
  [221 130 110]
  [200  99  90]]

 [[226 137 125]
  [226 137 125]
  [223 137 133]

 ...


 [[ 82  22  57]
  [ 82  22  57]
  [ 96  32  62]
  ...
  [179  70  79]
  [181  71  81]
  [185  74  81]]]
7.2.2.9.1 將灰度影像lena_gray.bmp轉化為陣列(反色)
from PIL import Image 
import matplotlib.pyplot as plt
import numpy as np
# 已經創建了lena_gray.bmp檔案

img_gray = Image.open("lena_gray.bmp")
arr_img_gray = np.array(img_gray)
print("\nshape:",arr_img_gray.shape)
print(arr_img_gray)

輸出結果為:

shape: (512, 512)

[[162 162 162 ... 170 155 128]
 [162 162 162 ... 170 155 128]
 [162 162 162 ... 170 155 128]
 ...
 [ 43  43  50 ... 104 100  98]
 [ 44  44  55 ... 104 105 108]
 [ 44  44  55 ... 104 105 108]]

我們可以對這個值做一些處理:

from PIL import Image 
import matplotlib.pyplot as plt
import numpy as np

img_gray = Image.open("lena_gray.bmp")
arr_img_gray = np.array(img_gray)

# 新陣列每個值都是原來的灰度值被255減去
arr_img_new = 255 - arr_img_gray

plt.figure(figsize=(10,5))

plt.subplot(221)
plt.axis("off")
plt.imshow(arr_img_gray,cmap="gray")

plt.subplot(222)
plt.axis("off")
plt.imshow(arr_img_new,cmap="gray")

plt.show()

輸出結果為:
請添加圖片描述

  • 可以看到影像中的灰度和原圖正好相反
  • Image模塊中還提供了很多封裝好的函式,可以直接對圖片進行更上層的處理,不用轉換為陣列,對像素進行運算

7.2.2.10 對影像的縮放、旋轉和鏡像

7.2.2.10.1 縮放影像
7.2.2.10.1.1 img.resize()方法
影像物件.resize((width,height))

例如:

from PIL import Image 
import matplotlib.pyplot as plt
import numpy as np

img = Image.open("lena.tiff")

plt.figure(figsize=(5,5))
img_small = img.resize((64,64))

#將其保存起來
img_small.save("lena_s.jpg")

plt.imshow(img_small)
plt.show()

輸出結果為:
請添加圖片描述

  • 可以看到圖片的質量明顯下降了,出現了類似馬賽克的效應,可以看到現在圖片的尺寸已經變成了64*64,這個操作是一個降采樣的程序
7.2.2.10.1.2 img.thumbnail()方法
  • 該方法是原地操作,回傳值是none
  • 也就是說直接對img物件進行了縮放
7.2.2.10.2 旋轉、鏡像(即左右翻轉)
影像物件.transpose(旋轉方式)
  • 通過引數選擇旋轉或者翻轉的方式
引數說明
Image.FLIP_LEFT_RIGHT水平翻轉
Image.FLIP_TOP_BOTTOM上下翻轉
Image.ROTATE_90逆時針旋轉90°
Image.ROTATE_180逆時針旋轉180°
Image.ROTATE_270逆時針旋轉270°
Image.TRANSPOSE將影像進行轉置
Image.TRANSVERSE將影像進行轉置,再水平翻轉

例如:

img_flr = img.transpose(Image.FLIP_LEFT_RIGHT)
img_r90 = img.transpose(Image.ROTATE_90)
img_tp = img.transpose(Image.TRANSPOSE)

例如,下面將這些變換的結果分別顯示在不同的子途中

from PIL import Image 
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = "SimHei"
img = Image.open("lena.tiff")

plt.figure(figsize=(10,10))

plt.subplot(221)
plt.axis("off")
plt.imshow(img)
plt.title("原圖",fontsize=20)

plt.subplot(222)
plt.axis("off")
img_flr = img.transpose(Image.FLIP_LEFT_RIGHT)
plt.imshow(img_flr)
plt.title("左右翻轉",fontsize=20)

plt.subplot(223)
plt.axis("off")
img_r90 = img.transpose(Image.ROTATE_90)
plt.imshow(img_r90)
plt.title("逆時針旋轉90度",fontsize=20)

plt.subplot(224)
plt.axis("off")
img_tp = img.transpose(Image.TRANSPOSE)
plt.imshow(img_tp)
plt.title("轉置",fontsize=20)

plt.show()

輸出結果為:
請添加圖片描述

7.2.2.11 裁剪影像

  • 裁剪影像:再影像上指定的位置裁剪出一個矩形區域
影像物件.crop((x0,y0,x1,y1))
  • x0,y0 為左上角
  • x1,y1 為右下角
  • 回傳值:影像物件

```python
img_region = img.crop((100,100,400,400))

例如:

from PIL import Image 
import matplotlib.pyplot as plt

img = Image.open("lena.tiff")

plt.figure(figsize=(10,5))

plt.subplot(121)
plt.imshow(img)

plt.subplot(122)
img_region = img.crop((100,100,400,400))# 注意y軸是從上往下而從小到大的
plt.imshow(img_region)

plt.show()

輸出結果為:
請添加圖片描述

7.2.3 常用的影像處理庫

  • skimage
  • cv2

7.3 實體:手寫數字資料集MNIST

7.3.1 影像操作匯總表

影像操作方法/函式/屬性
打開影像Image.open(路徑)
保存影像影像物件.save()
查看影像的屬性影像物件.format、影像物件.size、影像物件.mode
顯示影像plt.imshow(Image物件/Numpy陣列)
轉移影像的色彩模式影像物件.convert(色彩模式)
顏色通道的分離和合并影像物件.split()、Image.merge(色彩模式,影像串列)
將影像轉換為陣列np.array(影像物件)
影像的縮放影像物件.resize((width,height))
旋轉和鏡像影像物件.transpose(旋轉方式)

7.3.2 MNIST資料集

  • Mixed National Institute of standards and Technology and Technology database
  • New York University, Yann LeCun
  • 60000條訓練資料和10000條測驗資料
  • 由250個不同的人手寫而成
  • 都是28*28像素,灰度影像
  • 將每一副圖片存盤在28*28的二維陣列中,陣列中的每個元素對應著圖片中的每個像素
  • MNIST資料集已經被集成在keras中了,可以使用keras中的datasets模塊來訪問它

7.3.2.1 下載MNIST資料集

import tensorflow as tf
mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()

第一次會先進行下載:

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
 11493376/11490434 [==============================] - 12s 1us/step
  • 下載路徑:C:\Users\Administrator\.keras\datasets\mnist.npz

7.3.2.2 輸出訓練集和測驗集的長度

print("Training set:",len(train_x))
print("testing set:",len(test_x))

輸出結果為:

Training set: 60000
testing set: 10000

7.3.2.3 輸出影像資料和標記資料的形狀

print("train_x:",train_x.shape,train_x.dtype)
print("trian_y:",train_y.shape,train_y.dtype)

輸出結果為:

train_x: (60000, 28, 28) uint8
trian_y: (60000,) uint8

7.3.2.4 顯示手寫數字圖片

7.3.2.4.1 輸出資料集中的第1個樣本
  • 這是一個28*28中的陣列,陣列中的每個元素對應影像的一個像素
  • 因為數字的背景為黑色,數字不為零的元素就是手寫的筆畫的部分
>>> train_x[0] 
array([[  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   3,
         18,  18,  18, 126, 136, 175,  26, 166, 255, 247, 127,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,  30,  36,  94, 154, 170,
        253, 253, 253, 253, 253, 225, 172, 253, 242, 195,  64,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,  49, 238, 253, 253, 253, 253,
        253, 253, 253, 253, 251,  93,  82,  82,  56,  39,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,  18, 219, 253, 253, 253, 253,
        253, 198, 182, 247, 241,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,  80, 156, 107, 253, 253,
        205,  11,   0,  43, 154,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,  14,   1, 154, 253,
         90,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0, 139, 253,
        190,   2,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,  11, 190,
        253,  70,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,  35,
        241, 225, 160, 108,   1,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
         81, 240, 253, 253, 119,  25,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,  45, 186, 253, 253, 150,  27,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,  16,  93, 252, 253, 187,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0, 249, 253, 249,  64,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,  46, 130, 183, 253, 253, 207,   2,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,  39,
        148, 229, 253, 253, 253, 250, 182,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,  24, 114, 221,
        253, 253, 253, 253, 201,  78,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,  23,  66, 213, 253, 253,
        253, 253, 198,  81,   2,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,  18, 171, 219, 253, 253, 253, 253,
        195,  80,   9,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,  55, 172, 226, 253, 253, 253, 253, 244, 133,
         11,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0, 136, 253, 253, 253, 212, 135, 132,  16,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0,   0,   0,   0,   0,   0,   0,   
0,   0,   0,   0,   0,
          0,   0]], dtype=uint8)
7.3.2.4.2 顯示圖片
import tensorflow as tf
import matplotlib.pyplot as plt

mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()

plt.axis("off")
plt.imshow(train_x[0],cmap="gray")
plt.show()

輸出結果為:
請添加圖片描述

  • 下面輸出這個圖片的標簽
>>> train_y[0] 
5
7.3.2.4.3 隨機顯示4幅手寫數字圖片
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()


for i in range(4):
	num = np.random.randint(1,60000)

	plt.subplot(1,4,i+1)
	plt.axis("off")
	plt.imshow(train_x[num],cmap="gray")
	plt.title(train_y[num])

plt.show()

輸出結果為:
請添加圖片描述

7.3.3 習題及相關庫補充(未作,有時間寫)

請添加圖片描述
請添加圖片描述
請添加圖片描述
請添加圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350795.html

標籤:AI

上一篇:手把手寫深度學習(3)——用RNN回圈神經網路自動生成歌詞之理論篇

下一篇:機器學習中的距離計算方法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more