# b.神經網路的資料表示法:張量Tensor
###### tags: `Deep Learning by Keras God`
> <font color="#EA0000" >**#結論:將多個3維張量放到陣列,會成為4維張量**</font>
> <font color="#EA0000" >**#同理:將多個4維張量放到陣列,會成為5維張量**</font>
## 1.張量的關鍵屬性
* <font color="#0080FF">**匯入手寫辨識資料集(Mnist)**</font>
```python=+
from keras.datasets import mnist
(train_img,train_label),(test_img,test_label) = mnist.load_data()
```
> ```11493376/11490434 [==============================] - 0s 0us/step```
##
* <font color="#0080FF">**瞭解資料**</font>
```python=+
print(train_img.ndim,train_img.shape,train_img.dtype)
```
> ```3 (60000, 28, 28) uint8```
##
* <font color="#0080FF">**查看圖片**</font>
```python=+
import matplotlib.pyplot as plt
digit = train_img[4] #查看第5張圖片
plt.imshow(digit,cmap = plt.cm.binary)
plt.show()
```
> 
##
* <font color="#0080FF">**擷取特定資料**</font>
```python=+
my_slice = train_img[10:100]
print(my_slice.shape)
my_slice = train_img[10:100,:,:]
print(my_slice.shape)
my_slice = train_img[10:100,0:28,0:28]
print(my_slice.shape)
```
> ```(90, 28, 28)```</br>
> ```(90, 28, 28)```</br>
> ```(90, 28, 28)```
##
* <font color="#0080FF">**擷取圖片特定範圍**</font>
```python=+
#切出每張圖片右下角14*14的像素
my_slice = train_img[:,14:,14:]
print(my_slice.shape)
#擷取每張圖片居中的14*14像素
my_slice = train_img[:,7:-7,7:-7]
print(my_slice.shape)
```
> ```(60000, 14, 14)```</br>
> ```(60000, 14, 14)```
## 2.常見的資料型態
| 維度 | 型態 |
|:----:|:------------------:|
| #2D | 向量資料 |
| #3D | 時間序列或序列資料 |
| #4D | 影像 |
| #5D | 視訊 |
## 3.神經網路的工具:張量運算
* <font color="#0080FF">**張量擴張 Broadcasting**</font>
```python=+
import numpy as np
x = np.random.random((64,3,32,10))
y = np.random.random((32,10)) #會自動擴張,但結尾維度數量要一樣
z = np.maximum(x,y)
z.shape
```
> ```(64, 3, 32, 10)```
#
* <font color="#0080FF">**張量擴張 Broadcasting**</font>
```python=+
import numpy as np
x = np.random.random((64,3,32,10))
y = np.random.random((32,10)) #會自動擴張,但結尾維度數量要一樣
z = np.maximum(x,y)
z.shape
```
> ```(64, 3, 32, 10)```
#
* <font color="#0080FF">**張量點積運算 Dot**</font>
```python=+
import numpy as np
x = np.random.random((64,3,32,10))
y = np.random.random((32,10)) #會自動擴張,但結尾維度數量要一樣
z = np.maximum(x,y)
z.shape
```
> ```(64, 3, 32, 10)```
## 時間戳記
> [name=ZEOxO][time=Sun, Dec 06, 2020 15:53 PM][color=#907bf7]