第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

TensorFlow 入門教程

首頁(yè) 慕課教程 TensorFlow 入門教程 TensorFlow 入門教程 使用 TensorFlow 加載 Numpy 數(shù)據(jù)

使用 TensorFlow 加載 Numpy 數(shù)據(jù)

在科學(xué)計(jì)算之中,Numpy 是一種必不可少的工具,因此我們?cè)跈C(jī)器學(xué)習(xí)的過(guò)程之中難免會(huì)遇到使用 Numpy 數(shù)據(jù)的情況,所以我們有必要學(xué)習(xí)如何在 TensorFlow 之中學(xué)習(xí)如何使用 Numpy 數(shù)據(jù)。

1. 什么是 Numpy

Numpy 是 Python 的一個(gè)擴(kuò)展庫(kù)。支持高階維度數(shù)組的復(fù)雜運(yùn)算以及矩陣的運(yùn)算。因此在進(jìn)行科學(xué)計(jì)算的時(shí)候使用 Numpy 進(jìn)行數(shù)據(jù)處理便會(huì)特別的方便。

在具體的使用過(guò)程之中,我們一般會(huì)遇到兩種情況:

  • 在內(nèi)存中定義了 Numpy 數(shù)組,需要提供給 TesnorFlow 使用;
  • 我們需要加載 Numpy 存放的文件的數(shù)據(jù),也就是需要從“.npz”文件之中讀取數(shù)據(jù)

因此這節(jié)課之中我們就從兩個(gè)方面來(lái)說(shuō)明如何使用 Numpy 數(shù)據(jù)。

2. 在內(nèi)存中使用 Numpy 數(shù)據(jù)

如果我們?cè)趦?nèi)存中定義了 Numpy 數(shù)據(jù),那么我們便可以通過(guò) tf.convert_to_tensor() 函數(shù)來(lái)將 Numpy 數(shù)據(jù)轉(zhuǎn)化為 Tensor,從而提供給 TensorFlow 使用。比如以下示例:

import tensorflow as tf
import Numpy as np

x_np = np.zeros((5, 3))
x_tensor = tf.convert_to_tensor(x_np)

print(type(x_np), type(x_tensor))
print(x_tensor)

我們可以得到結(jié)果如下,說(shuō)明該函數(shù)已經(jīng)成功的將 Numpy 數(shù)組轉(zhuǎn)化為了 Tensor 對(duì)象:

<class 'Numpy.ndarray'> <class 'tensorflow.python.framework.ops.EagerTensor'>
tf.Tensor(
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]], shape=(5, 3), dtype=float64)

那如果我們需要將 Tensor 轉(zhuǎn)化為 Numpy 呢?我們只需要使用 Tensor 對(duì)象中的 Numpy 函數(shù)即可將其轉(zhuǎn)化為 Numpy 。

比如我們接上面的例子:

......

print(type(x_np_new))
print(x_np_new)

我們可以得到輸出:

<class 'Numpy.ndarray'>
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

由此我們可以發(fā)現(xiàn),通過(guò) Tensor 對(duì)象的 Numpy 方法可以將 Tensor 對(duì)象轉(zhuǎn)化為 Numpy 數(shù)組。

3. 從“.npz”文件之中讀取數(shù)據(jù)

當(dāng)我們要從 .npz 文件之中讀取并使用數(shù)據(jù)的時(shí)候,我們大概要經(jīng)過(guò)三個(gè)步驟

  • 打開(kāi) .npz 文件,并且其格式加載數(shù)據(jù),要注意,不同的 .npz 文件中的格式都是由人為定義的,因此只有了解了文件中的組織格式,才能加載數(shù)據(jù);
  • 將加載的 .npz 數(shù)據(jù)轉(zhuǎn)化為 tf.data.Dataset ;
  • 進(jìn)一步處理并使用該數(shù)據(jù)集合。

下面我們以一個(gè)簡(jiǎn)單的手寫數(shù)字識(shí)別數(shù)據(jù)集(mnist)為例,來(lái)演示如何進(jìn)行數(shù)據(jù)的加載與使用。

3.1 打開(kāi)文件并加載數(shù)據(jù)

這里用到的npz文件大家可以從谷歌倉(cāng)庫(kù)中下載,大家可以通過(guò)該鏈接下載。

然后我們需要首先得到下載文件的本地地址,在這里我假設(shè)地址是’/root/.keras/datasets/mnist.npz’。

該數(shù)據(jù)集是由一個(gè)字典組成,這個(gè)字典由四個(gè)元素組成,他們的key分別是:

  • x_train: 訓(xùn)練數(shù)據(jù)的圖片數(shù)據(jù);
  • y_train: 訓(xùn)練數(shù)據(jù)的標(biāo)簽;
  • x_test: 測(cè)試數(shù)據(jù)的圖片數(shù)據(jù);
  • y_test: 測(cè)試數(shù)據(jù)的標(biāo)簽。

了解了數(shù)據(jù)的結(jié)構(gòu)后,我們便可以通過(guò)以下操作進(jìn)行數(shù)據(jù)的加載:

import Numpy as np
import tensorflow as tf

path = '/root/.keras/datasets/mnist.npz'
with np.load(path) as np_data:
  train_exa = np_data['x_train']
  train_labels = np_data['y_train']
  test_exa = np_data['x_test']
  test_labels = np_data['y_test']

這樣我們便完成了數(shù)據(jù)的加載。

3.2 構(gòu)建tf.data.Dataset數(shù)據(jù)集

和之前一樣,我們主要是通過(guò) tf.data.Dataset.from_tensor_slices() 函數(shù)來(lái)構(gòu)建數(shù)據(jù)集。比如我們可以通過(guò)以下代碼實(shí)現(xiàn):

train_dataset = tf.data.Dataset.from_tensor_slices((train_exa, train_labels))
test_dataset = tf.data.Dataset.from_tensor_slices((test_exa, test_labels))

print(train_dataset, test_dataset)

我們可以得到如下輸出:

<TensorSliceDataset shapes: ((28, 28), ()), types: (tf.uint8, tf.uint8)>
<TensorSliceDataset shapes: ((28, 28), ()), types: (tf.uint8, tf.uint8)>

由此,我們便通過(guò) Numpy 數(shù)組正式構(gòu)建了 tf.data.Dataset 數(shù)據(jù)集合。

3.3 進(jìn)一步的處理與使用

當(dāng)我們僅僅創(chuàng)建了數(shù)據(jù)集是遠(yuǎn)遠(yuǎn)不夠的,我們還要進(jìn)行進(jìn)一步的處理,比如分批、打亂等基本操作。

train_dataset = train_dataset.shuffle(128).batch(64)
test_dataset = test_dataset.batch(64)

print(train_dataset, test_dataset)

我們可以得到如下輸出:

<BatchDataset shapes: ((None, 28, 28), (None,)), types: (tf.uint8, tf.uint8)>
<BatchDataset shapes: ((None, 28, 28), (None,)), types: (tf.uint8, tf.uint8)>

在這里,我們對(duì)數(shù)據(jù)集合進(jìn)行了亂序處理,然后將其按照 64 的大小進(jìn)行批次的劃分。

在接下來(lái)我們便可以使用該數(shù)據(jù)集,在這里我們可以使用一個(gè)簡(jiǎn)單的分類模型進(jìn)行示例:

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=['accuracy'])

model.fit(train_dataset, epochs=20)

model.evaluate(test_dataset)

我們可以通過(guò)輸出發(fā)現(xiàn),該模型對(duì)數(shù)據(jù)進(jìn)行了良好的分類:

Epoch 1/20
469/469 [==============================] - 1s 3ms/step - loss: 6.4886 - accuracy: 0.8282
Epoch 2/20
469/469 [==============================] - 1s 3ms/step - loss: 1.0750 - accuracy: 0.8630
......
Epoch 20/20
469/469 [==============================] - 1s 3ms/step - loss: 0.1222 - accuracy: 0.9657
157/157 [==============================] - 0s 1ms/step - loss: 0.2871 - accuracy: 0.9456
[0.2871202528476715, 0.9455999732017517]

4. 小結(jié)

在這節(jié)課之中,我們學(xué)習(xí)了什么是 Numpy 數(shù)據(jù),同時(shí)一方面了解了 Numpy 數(shù)組與 Tensor 如何在內(nèi)存中互相轉(zhuǎn)化,另一方面我們也了解了如何從".npz"文件之中讀取數(shù)據(jù)并進(jìn)一步使用。

圖片描述