日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习-Tensorflow2基础知识

發布時間:2025/4/5 pytorch 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习-Tensorflow2基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1、使用tensorflow_datasets
    • 1.1 加載數據集
    • 1.2 查看數據集中某些樣本的信息
    • 1.3 將樣本標準化
    • 1.4 將樣本打亂、分批
    • 1.5 查看最終的訓練樣本
  • 2、將已有的csv文件作為數據集
    • 2.2 數據標準化
    • 2.3 劃分訓練集和測試集
    • 2.4 劃分特征與標簽
    • 2.5 切片處理
  • 3、使用tf.keras.datasets
    • 3.1 導入數據集
    • 3.2 特征歸一化
    • 3.3 切片
  • 4、Dataset數據集
    • 4.1 將Dataframe改為Dataset數據集
    • 4.2 將array改為Dataset數據集
    • 4.3 將csv文件中數據導入到Dataset數據集
    • 4.4 創建Dataset數據集
  • 5、圖片
    • 5.1 導入
    • 5.2 將圖片轉換為需要的類型
    • 5.3 刪除dataset中的灰度圖
    • 5.4 加入batch和shuffle
  • 6、使用 wget.download 在官網下載數據集
    • 6.1 去官網下載數據集
    • 6.2 解壓數據集壓縮包
    • 6.3 讀取圖像文件
  • 7、文本
    • 7.2 得到文本所在目錄
      • 7.2.1 下載數據集
    • 7.2.2 查找目錄地址
    • 7.3 生成 dataset
      • 7.3.1 為每個類別的樣本都單獨生成一個數據集
      • 7.3.2 將三個 dataset 合并成一個 dataset
      • 7.3.3 將 dataset 打亂
    • 7.4 將文本編碼成數字形式
      • 7.4.1 建立詞匯表
      • 7.4.2 建立編碼器
      • 7.4.3 對所有樣本進行編碼
    • 7.5 將數據集分割為測試集和訓練集
  • 8、將標簽數字化

1、使用tensorflow_datasets

tensorflow_datasets是一個非常有用的庫,其中包含了很多數據集,通過運行:

tfds.list_builders()

可以查看其中包含的所有數據集。

1.1 加載數據集

import tensorflow_datasets as tfds(raw_train, raw_validation, raw_test), metadata = tfds.load('cats_vs_dogs',split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],shuffle_files=False,batch_size=None,with_info=True,as_supervised=True, )

參數說明:

輸入:

  • name:數據集的名稱,可以通過運行tfds.list_builders()獲得。
  • split:如何劃分數據集,如果不進行劃分,則只得到訓練集(即全部樣本)。
  • shuffle_files:是否打亂。
  • batch_size:是否每次分批取出。如果為None,則每次取出一個樣本。
  • with_info:是否輸出數據集信息。
  • as_supervised:為True時,函數會返回一個二元組 (input, label),而不是返回 FeaturesDict。

輸出:

  • (raw_train, raw_validation, raw_test):split之后的數據。
  • metadata:數據集信息。

1.2 查看數據集中某些樣本的信息

for image, label in raw_train.take(2):print(image.shape,label)print(label)""" 輸出: (262, 350, 3) tf.Tensor(0, shape=(), dtype=int64) (428, 500, 3) tf.Tensor(1, shape=(), dtype=int64) """

獲取標簽所代表的種類

get_label_name = metadata.features['label'].int2str for image, label in raw_train.take(2):print(image.shape)print(label)print(get_label_name(label)) ''' 輸出: (262, 350, 3) tf.Tensor(0, shape=(), dtype=int64) cat (428, 500, 3) tf.Tensor(1, shape=(), dtype=int64) dog'''

1.3 將樣本標準化

IMG_SIZE = 160 # All images will be resized to 160x160def format_example(image, label):image = tf.cast(image, tf.float32)image = (image/127.5) - 1image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))return image, label train = raw_train.map(format_example) validation = raw_validation.map(format_example) test = raw_test.map(format_example)

當然,這里也可以用下面的代碼代替:

for image, label in raw_train:image = tf.cast(image, tf.float32)image = (image/127.5) - 1image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))

但這將會非常花時間!!!

1.4 將樣本打亂、分批

如果在導入數據集的時候沒有shuffle和分批,那么可以在之后進行。

BATCH_SIZE = 32 SHUFFLE_BUFFER_SIZE = 1000 train_batches = train.shuffle(SHUFFLE_BUFFER_SIZE).batch(BATCH_SIZE) validation_batches = validation.batch(BATCH_SIZE) test_batches = test.batch(BATCH_SIZE)

1.5 查看最終的訓練樣本

for image_batch, label_batch in train_batches.take(1):print(image_batch.shape)print(label_batch.shape) ''' 輸出: (32, 160, 160, 3) (32,) '''

2、將已有的csv文件作為數據集

2.2 數據標準化

data_mean = dataset_.mean(axis=0) data_std = dataset_.std(axis=0)dataset_ = (dataset_-data_mean)/data_std

2.3 劃分訓練集和測試集

因為這個數據集本身不分訓練集和測試集,所以在這里要用sklearn庫進行劃分。

from sklearn.model_selection import train_test_split train, test = train_test_split(dataset_, test_size=0.1)

2.4 劃分特征與標簽

train_x = train[:, :-1].astype(np.float32) train_y = train[:, -1].astype(np.float32) test_x = test[:, :-1].astype(np.float32) test_y = test[:, -1].astype(np.float32)

2.5 切片處理

dataset_train = tf.data.Dataset.from_tensor_slices((train_x, train_y)).shuffle(train_y.shape[0]).batch(32) dataset_test = tf.data.Dataset.from_tensor_slices((test_x, test_y)).shuffle(test_y.shape[0]).batch(32)

將此輸入模型,即可進行訓練。

3、使用tf.keras.datasets

3.1 導入數據集

(x, y), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

3.2 特征歸一化

因為這里特征是圖片,所以除以255即可。

def preprocess(x, y):x = tf.cast(x, dtype=tf.float32) / 255.0y = tf.cast(y, dtype=tf.int32)return x,y

3.3 切片

batchsz = 128db = tf.data.Dataset.from_tensor_slices((x,y)) db = db.map(preprocess).shuffle(10000).batch(batchsz)db_test = tf.data.Dataset.from_tensor_slices((x_test,y_test)) db_test = db_test.map(preprocess).batch(batchsz)

將此輸入模型,即可進行訓練。

4、Dataset數據集

4.1 將Dataframe改為Dataset數據集

#target為標簽列,將其從dataframe中刪除,并返回刪除內容于labels中。 labels = dataframe.pop('target') ds = tf.data.Dataset.from_tensor_slices((dict(dataframe), labels))

4.2 將array改為Dataset數據集

# 從Numpy array構建數據管道import tensorflow as tf import numpy as np from sklearn import datasets iris = datasets.load_iris()ds1 = tf.data.Dataset.from_tensor_slices((iris["data"],iris["target"])) for features,label in ds1.take(5):print(features,label) ''' 輸出: tf.Tensor([5.1 3.5 1.4 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int32) tf.Tensor([4.9 3. 1.4 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int32) tf.Tensor([4.7 3.2 1.3 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int32) tf.Tensor([4.6 3.1 1.5 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int32) tf.Tensor([5. 3.6 1.4 0.2], shape=(4,), dtype=float64) tf.Tensor(0, shape=(), dtype=int32) '''

4.3 將csv文件中數據導入到Dataset數據集

ds4 = tf.data.experimental.make_csv_dataset(file_pattern = ["../A.csv","../B.csv"],batch_size=3, label_name="Survived",na_value="",num_epochs=1,ignore_errors=True)for data,label in ds4.take(2):print(data,label)

4.4 創建Dataset數據集

batch_size = 5 # 小批量大小用于演示 train_ds = df_to_dataset(train, batch_size=batch_size) val_ds = df_to_dataset(val, shuffle=False, batch_size=batch_size) test_ds = df_to_dataset(test, shuffle=False, batch_size=batch_size)

此處返回的皆為字典形式。
可以通過以下方式查看數據集信息:

for feature_batch, label_batch in train_ds.take(1):print('Every feature:', list(feature_batch.keys()))print('A batch of ages:', feature_batch['age'])print('A batch of targets:', label_batch ) ''' 輸出: Every feature: ['age', 'sex', 'cp', 'trestbps', 'chol', 'fbs', 'restecg', 'thalach', 'exang', 'oldpeak', 'slope', 'ca', 'thal'] A batch of ages: tf.Tensor([61 59 58 42 40], shape=(5,), dtype=int32) A batch of targets: tf.Tensor([1 1 0 1 0], shape=(5,), dtype=int32) '''

5、圖片

我們用horse2zebra數據集舉例:此數據集中包含4個文件夾,分別是horse訓練集、zebra訓練集、horse測試集以及zebra測試集。每個訓練集中都包含1000多張 (256, 256, 3) 的彩色圖片(摻有一些灰度圖片,之后會在代碼中刪掉)。

5.1 導入

PATH = 'C:\\Users\\kzb' train_horses = tf.data.Dataset.list_files(PATH+'trainA/*.jpg') train_zebras = tf.data.Dataset.list_files(PATH+'trainB/*.jpg') test_horses = tf.data.Dataset.list_files(PATH+'testA/*.jpg') test_zebras = tf.data.Dataset.list_files(PATH+'testB/*.jpg')

此時導入的是字符串類型的dataset。

5.2 將圖片轉換為需要的類型

def load(image_file):image = tf.io.read_file(image_file)image = tf.image.decode_jpeg(image)image = tf.cast(image, tf.float32)return image

打印出一張圖片查看:

img = load(PATH+'trainB/n02391049_2.jpg') # casting to int for matplotlib to show the image plt.figure() plt.imshow(img/255.0)

5.3 刪除dataset中的灰度圖

for dirname, _, filenames in os.walk(PATH+'trainB'):for filename in filenames:img = load(os.path.join(dirname, filename))if img.shape != (256, 256, 3):print(filename)print(img.shape)os.remove(os.path.join(dirname, filename))

5.4 加入batch和shuffle

AUTOTUNE = tf.data.experimental.AUTOTUNE train_horses = train_horses.map(load, num_parallel_calls=AUTOTUNE).cache().shuffle(1000).batch(1)train_zebras = train_zebras.map(load, num_parallel_calls=AUTOTUNE).cache().shuffle(1000).batch(1)test_horses = test_horses.map(load, num_parallel_calls=AUTOTUNE).cache().shuffle(1000).batch(1)test_zebras = test_zebras.map(load, num_parallel_calls=AUTOTUNE).cache().shuffle(1000).batch(1)

將此輸入模型,即可進行訓練。

6、使用 wget.download 在官網下載數據集

以熱狗數據集舉例。

6.1 去官網下載數據集

import os import wget data = os.getcwd()+'/data' base_url = 'https://apache-mxnet.s3-accelerate.amazonaws.com/' wget.download(base_url + 'gluon/dataset/hotdog.zip',data)

其中,os.getcwd() 返回的是當前 .py 文件所在的文件夾。wget.download(data, dir) 是將 data 數據集(壓縮包)下載到 dir 文件夾中。

6.2 解壓數據集壓縮包

import zipfile with zipfile.ZipFile('data', 'r') as z:z.extractall(os.getcwd())

6.3 讀取圖像文件

創建兩個 tf.keras.preprocessing.image.ImageDataGenerator 實例來分別讀取訓練數據集和測試數據集中的所有圖像文件。 這里我們將訓練集圖片全部處理為高和寬均為224像素的輸入。此外,我們對RGB(紅、綠、藍)三個顏色通道的數值做標準化。

import pathlib train_dir = 'hotdog/train' test_dir = 'hotdog/test' train_dir = pathlib.Path(train_dir) train_count = len(list(train_dir.glob('*/*.jpg'))) test_dir = pathlib.Path(test_dir) test_count = len(list(test_dir.glob('*/*.jpg')))CLASS_NAMES = np.array([item.name for item in train_dir.glob('*') if item.name != 'LICENSE.txt' and item.name[0] != '.']) CLASS_NAMESimage_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255) # 標準化 BATCH_SIZE = 32 IMG_HEIGHT = 224 IMG_WIDTH = 224train_data_gen = image_generator.flow_from_directory(directory=str(train_dir),batch_size=BATCH_SIZE,target_size=(IMG_HEIGHT, IMG_WIDTH),shuffle=True,classes = list(CLASS_NAMES))test_data_gen = image_generator.flow_from_directory(directory=str(test_dir),batch_size=BATCH_SIZE,target_size=(IMG_HEIGHT, IMG_WIDTH),shuffle=True,classes = list(CLASS_NAMES))

7、文本

使用 tf.data.TextLineDataset 來加載文本文件。TextLineDataset 通常被用來以文本文件構建數據集(文件中的一行為一個樣本) 。這適用于大多數的基于行的文本數據(例如,詩歌、小說或錯誤日志) 。

7.2 得到文本所在目錄

7.2.1 下載數據集

如果是自己的數據集,這一步可以跳過。

在這里,我們將使用相同作品(荷馬的伊利亞特)的三個不同版本的英文翻譯舉例,以文本的每一行作為樣本特征,以作者為標簽。

import tensorflow as tfDIRECTORY_URL = 'https://storage.googleapis.com/download.tensorflow.org/data/illiad/' FILE_NAMES = ['cowper.txt', 'derby.txt', 'butler.txt']for name in FILE_NAMES:text_dir = tf.keras.utils.get_file(name, origin=DIRECTORY_URL+name)

7.2.2 查找目錄地址

parent_dir = os.path.dirname(text_dir) parent_dir

7.3 生成 dataset

7.3.1 為每個類別的樣本都單獨生成一個數據集

def labeler(example, index):return example, tf.cast(index, tf.int64) labeled_data_sets = []for i, file_name in enumerate(FILE_NAMES):lines_dataset = tf.data.TextLineDataset(os.path.join(parent_dir, file_name))labeled_dataset = lines_dataset.map(lambda ex: labeler(ex, i))labeled_data_sets.append(labeled_dataset)

tf.data.TextLineDataset(): 輸入一個文件地址,輸出是一個 dataset。dataset 中的每一個元素就對應了文件中的一行。
比如:

a = tf.data.TextLineDataset(os.path.join(parent_dir, 'cowper.txt')) for each in a.take(5):print(each) ''' 輸出: tf.Tensor(b"\xef\xbb\xbfAchilles sing, O Goddess! Peleus' son;", shape=(), dtype=string) tf.Tensor(b'His wrath pernicious, who ten thousand woes', shape=(), dtype=string) tf.Tensor(b"Caused to Achaia's host, sent many a soul", shape=(), dtype=string) tf.Tensor(b'Illustrious into Ades premature,', shape=(), dtype=string) tf.Tensor(b'And Heroes gave (so stood the will of Jove)', shape=(), dtype=string) '''

然后我們將得到的 dataset 映射到 labeler 函數中,將標簽添加到 dataset 中:

b = a.map(lambda ex: labeler(ex, 0)) for each in b.take(5):print(each) ''' 輸出: (<tf.Tensor: id=95344, shape=(), dtype=string, numpy=b"\xef\xbb\xbfAchilles sing, O Goddess! Peleus' son;">, <tf.Tensor: id=95345, shape=(), dtype=int64, numpy=0>) (<tf.Tensor: id=95346, shape=(), dtype=string, numpy=b'His wrath pernicious, who ten thousand woes'>, <tf.Tensor: id=95347, shape=(), dtype=int64, numpy=0>) (<tf.Tensor: id=95348, shape=(), dtype=string, numpy=b"Caused to Achaia's host, sent many a soul">, <tf.Tensor: id=95349, shape=(), dtype=int64, numpy=0>) (<tf.Tensor: id=95350, shape=(), dtype=string, numpy=b'Illustrious into Ades premature,'>, <tf.Tensor: id=95351, shape=(), dtype=int64, numpy=0>) (<tf.Tensor: id=95352, shape=(), dtype=string, numpy=b'And Heroes gave (so stood the will of Jove)'>, <tf.Tensor: id=95353, shape=(), dtype=int64, numpy=0>) '''

7.3.2 將三個 dataset 合并成一個 dataset

all_labeled_data = labeled_data_sets[0] for labeled_dataset in labeled_data_sets[1:]:all_labeled_data = all_labeled_data.concatenate(labeled_dataset)

7.3.3 將 dataset 打亂

BUFFER_SIZE = 50000 all_labeled_data = all_labeled_data.shuffle(BUFFER_SIZE, reshuffle_each_iteration=False)

我們可以打印 dataset 中前5個元素:

for ex in all_labeled_data.take(5):print(ex) ''' 輸出: (<tf.Tensor: id=95461, shape=(), dtype=string, numpy=b"Uprear'd, a wonder even in eyes divine.">, <tf.Tensor: id=95462, shape=(), dtype=int64, numpy=0>) (<tf.Tensor: id=95463, shape=(), dtype=string, numpy=b'hecatombs, but to the daughter of great Jove alone he had made no'>, <tf.Tensor: id=95464, shape=(), dtype=int64, numpy=2>) (<tf.Tensor: id=95465, shape=(), dtype=string, numpy=b'strode onward. The Argives were elated as they beheld him, but the'>, <tf.Tensor: id=95466, shape=(), dtype=int64, numpy=2>) (<tf.Tensor: id=95467, shape=(), dtype=string, numpy=b'"Friends, Grecian Heroes, Ministers of Mars,'>, <tf.Tensor: id=95468, shape=(), dtype=int64, numpy=1>) (<tf.Tensor: id=95469, shape=(), dtype=string, numpy=b'sin against their oaths--of them and their children--may be shed upon'>, <tf.Tensor: id=95470, shape=(), dtype=int64, numpy=2>) '''

可見此三個類別的樣本都已經包含在 dataset 中了。

7.4 將文本編碼成數字形式

7.4.1 建立詞匯表

import tensorflow_datasets as tfds import ostokenizer = tfds.features.text.Tokenizer()vocabulary_set = set() for text in df["text"]:some_tokens = tokenizer.tokenize(text)vocabulary_set.update(some_tokens)vocab_size = len(vocabulary_set) vocab_size ''' 輸出: 10000 '''

其中 tokenizer = tfds.features.text.Tokenizer() 的目的是實例化一個分詞器,tokenizer.tokenize 可以將一句話分成多個單詞,例如:

for text_tensor, _ in all_labeled_data.take(1):print(text_tensor)print(text_tensor.numpy())print(tokenizer.tokenize(text_tensor.numpy())) tf.Tensor(b"Uprear'd, a wonder even in eyes divine.", shape=(), dtype=string) b"Uprear'd, a wonder even in eyes divine." ['Uprear', 'd', 'a', 'wonder', 'even', 'in', 'eyes', 'divine']

7.4.2 建立編碼器

encoder = tfds.features.text.TokenTextEncoder(vocabulary_set)

我們拿一個樣本實驗:

example_text = next(iter(all_labeled_data))[0].numpy() print(example_text)encoded_example = encoder.encode(example_text) print(encoded_example)''' 輸出: b'I mean to pound his flesh, and smash his bones.' [1677, 9644, 1762, 15465, 12945, 9225, 13806, 5555, 12945, 4829] '''

然后,我們將編碼器寫成函數供以后調用:

def encode(text_tensor, label):encoded_text = encoder.encode(text_tensor.numpy())return encoded_text, label

7.4.3 對所有樣本進行編碼

def encode_map_fn(text, label):# py_func doesn't set the shape of the returned tensors.encoded_text, label = tf.py_function(encode, inp=[text, label], Tout=(tf.int64, tf.int64))# `tf.data.Datasets` work best if all components have a shape set# so set the shapes manually: encoded_text.set_shape([None])label.set_shape([])return encoded_text, labelall_encoded_data = all_labeled_data.map(encode_map_fn)

其中,我們使用了 tf.py_function(func, inp, Tout, name=None) 函數:

  • 作用:包裝 Python 函數,讓 Python 代碼可以與 tensorflow 進行交互。

  • 參數:

    • func :自己定義的python函數名稱

    • inp :自己定義python函數的參數列表,寫成列表的形式,[tensor1,tensor2,tensor3] 列表的每一個元素是一個Tensor對象,

    • Tout:它與自定義的python函數的返回值相對應的,

      • 當Tout是一個列表的時候 ,如 [ tf.string,tf,int64,tf.float] 表示自定義函數有三個返回值,即返回三個tensor,每一個tensor的元素的類型與之對應;
      • 當Tout只有一個值的時候,如tf.int64,表示自定義函數返回的是一個整型列表或整型tensor;
      • 當Tout沒有值的時候,表示自定義函數沒有返回值。

注意:如果這里不使用 tf.py_function 而是使用 dataset.map,程序會報錯:

AttributeError: 'Tensor' object has no attribute 'numpy'

這是因為 datastep.map(function) 給解析函數 function 傳遞進去的參數,即上面的 encode(text_tensor, label) 中的 text_tensor 和 label 是 Tensor 而不是 EagerTensor 。可以這樣理解:

因為對一個數據集 dataset.map 的時候,并沒有預先對每一組樣本先進行 map 中映射的函數運算,而僅僅是告訴 dataset,你每一次拿出來的樣本時要先進行一遍 function 運算之后才使用的,所以 function 的調用是在每次迭代 dataset 的時候才調用的,但是預先的參數 text_tensor 和 label 只是一個“容器”,迭代的時候采用數據將這個“容器”填起來,而在運算的時候,雖然將數據填進去了,但是 text_tensor 和 label 依然還是一個 Tensor 而不是 EagerTensor,所以才會出現上面的問題。

此時,我們得到的最終 dataset 中的樣本已經從文本轉換成了數字向量:

for i in all_encoded_data.take(5):print(i) ''' 輸出: (<tf.Tensor: id=225383, shape=(8,), dtype=int64, numpy= array([ 1438, 14227, 5791, 16819, 11806, 13990, 10168, 11243],dtype=int64)>, <tf.Tensor: id=225384, shape=(), dtype=int64, numpy=0>) (<tf.Tensor: id=225388, shape=(13,), dtype=int64, numpy= array([ 3194, 4566, 1762, 15273, 9726, 377, 5972, 556, 11565,13400, 5594, 5132, 9271], dtype=int64)>, <tf.Tensor: id=225389, shape=(), dtype=int64, numpy=2>) (<tf.Tensor: id=225393, shape=(12,), dtype=int64, numpy= array([ 9549, 7697, 12367, 901, 7439, 4679, 3366, 11629, 5709,4866, 4566, 15273], dtype=int64)>, <tf.Tensor: id=225394, shape=(), dtype=int64, numpy=2>) (<tf.Tensor: id=225398, shape=(6,), dtype=int64, numpy=array([ 88, 12816, 14312, 7786, 377, 10566], dtype=int64)>, <tf.Tensor: id=225399, shape=(), dtype=int64, numpy=1>) (<tf.Tensor: id=225403, shape=(13,), dtype=int64, numpy= array([ 7888, 8908, 2313, 13645, 377, 12262, 13806, 2313, 7788,3289, 1718, 12822, 2595], dtype=int64)>, <tf.Tensor: id=225404, shape=(), dtype=int64, numpy=2>) '''

7.5 將數據集分割為測試集和訓練集

BATCH_SIZE = 64 TAKE_SIZE = 5000 train_data = all_encoded_data.skip(TAKE_SIZE).shuffle(BUFFER_SIZE) train_data = train_data.padded_batch(BATCH_SIZE, ((None, ), ()))test_data = all_encoded_data.take(TAKE_SIZE) test_data = test_data.padded_batch(BATCH_SIZE, ((None, ), ()))

使用 tf.data.Dataset.take 和 tf.data.Dataset.skip 來建立一個小一些的測試數據集和稍大一些的訓練數據集。tf.data.Dataset.take(TAKE_SIZE) 表示取 TAKE_SIZE 個樣本做測試集;tf.data.Dataset.skip(TAKE_SIZE) 表示取 總樣本數-TAKE_SIZE 個樣本做訓練集。

在數據集被傳入模型之前,數據集需要進行分批處理。最典型的是,每個批次中的樣本大小與格式需要一致。但是數據集中樣本并不全是相同大小的(每行文本字數并不相同)。因此,我們使用 tf.data.Dataset.padded_batch(而不是 batch )將樣本填充到相同的大小,這里把形狀設置成 (None, ) 之后,它會判斷在這個批次中的最長樣本的單詞個數,然后將該批次所有其他樣本用零填充到這個長度。

sample_text, sample_labels = next(iter(test_data)) sample_text[0], sample_labels[0] ''' 輸出: (<tf.Tensor: id=225755, shape=(15,), dtype=int64, numpy=array([ 1438, 14227, 5791, 16819, 11806, 13990, 10168, 11243, 0,0, 0, 0, 0, 0, 0], dtype=int64)>,<tf.Tensor: id=225759, shape=(), dtype=int64, numpy=0>) '''

由于我們引入了一個新的 token 來編碼(填充零),因此詞匯表大小增加了一個。

vocab_size += 1

之后在訓練的時候,直接將 train_data 輸入詞嵌入層即可。訓練的詳細信息請參照Tensorflow2.0之文本分類確定文章譯者。

8、將標簽數字化

原始數據

# categorical 實際上是計算一個列表型數據中的類別數,即不重復項, # 它返回的是一個CategoricalDtype 類型的對象,相當于在原來數據上附加上類別信息 , # 具體的類別可以通過和對應的序號可以通過 codes 和 categories df.airline_sentiment = pd.Categorical(df.airline_sentiment).codes df

數字化后的數據

總結

以上是生活随笔為你收集整理的深度学习-Tensorflow2基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。