Keras數據集:手把手教你使用深度學習神器Keras預處理數據集

一、為什麼需要預處理數據集

在深度學習的實際應用中,數據預處理是至關重要的一個環節。這是因為深度學習算法的準確性和性能密切相關於它在訓練時所使用的數據集的質量和規模。預處理數據集可以使你的算法更加精準高效,提高算法的泛化性、減少模型的擬合程度、提高模型的精度等多種好處。

在實際應用場景中,需要進行的預處理包括但不限於數據清洗、數據類型轉換、數據歸一化/標準化、數據的分割、數據的擴充、圖片的裁剪、旋轉等等。本文主要介紹如何使用Keras對數據集進行預處理。

二、Keras的數據預處理類

Keras提供了一些方便的工具幫助我們對數據進行預處理。下面介紹其中的幾個常用類。

1. DataGenerator

DataGenerator是Keras中用於數據強化(data augmentation)的工具類,它可以在訓練數據不充分的情況下,通過對數據集進行變換,生成更多的數據樣本,擴大我們的訓練集規模來提高訓練效果。下面是使用DataGenerator進行圖片強化的一個例子:


from keras.preprocessing.image import ImageDataGenerator
import cv2

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.1,
        height_shift_range=0.1,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

img = cv2.imread('img.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (150, 150))
img = img.reshape((1,) + img.shape)

i = 0
for batch in datagen.flow(img, batch_size=1):
    plt.figure(i)
    imgplot = plt.imshow(cv2.cvtColor(batch[0], cv2.COLOR_BGR2RGB))
    i += 1
    if i % 4 == 0:
        break
plt.show()

2. Dataset

Dataset是Keras中的一個數據集類,它提供了對數據的讀取、轉換、處理等一系列操作,是進行數據預處理的重要工具類。

查看本地數據集:


from keras.datasets import mnist

# load data
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# summarize loaded dataset
print('Train: X=%s, y=%s' % (x_train.shape, y_train.shape))
print('Test: X=%s, y=%s' % (x_test.shape, y_test.shape))

3. Text

Text是Keras中用於處理文本的工具類,它可以進行文本向量化、學習詞嵌入、截斷文本、填充文本等操作。

將文本向量化:


from keras.preprocessing.text import Tokenizer

docs = ['Well done!',
        'Good work',
        'Great effort',
        'nice work',
        'Excellent!']

# create the tokenizer
t = Tokenizer()

# fit the tokenizer on the documents
t.fit_on_texts(docs)

# summarize what was learned
print(t.word_counts)
print(t.document_count)
print(t.word_index)
print(t.word_docs)

# integer encode documents
encoded_docs = t.texts_to_matrix(docs, mode='count')
print(encoded_docs)

三、數據預處理的常用方法

1. 數據歸一化/標準化

數據歸一化/標準化是深度學習中常用的操作,它可以可以把不同特徵之間的值縮放到同一水平,防止某個特徵的值對算法的影響過大。

將數據標準化:


from sklearn.preprocessing import StandardScaler

# define data
data = [[0.1, 0.3],
        [0.2, 0.4],
        [0.3, 0.5],
        [0.4, 0.6],
        [0.5, 0.7]]

# create scaler
scaler = StandardScaler()

# fit and transform data
scaled = scaler.fit_transform(data)

# summarize transformed data
print(scaled)

2. 數據分割

為了進行模型的訓練集測試集劃分,需要對原始數據進行分割。

將數據隨機分割為訓練集和測試集:


from sklearn.model_selection import train_test_split

# define data
data = [[0.1, 0.3],
        [0.2, 0.4],
        [0.3, 0.5],
        [0.4, 0.6],
        [0.5, 0.7]]

# split into train/test sets
train, test = train_test_split(data, test_size=0.33, random_state=1)

# summarize data split
print(train)
print(test)

3. 數據缺失值處理

在實際應用中,經常會遇到缺失數據的情況,因此處理缺失數據也是數據預處理中十分必要的一步。

通過平均值填充缺失的數據:


from numpy import isnan
from pandas import read_csv
from sklearn.impute import SimpleImputer

# load dataset
dataset = read_csv('data.csv', header=None)

# mark all missing values
dataset[dataset == '?'] = numpy.nan

# convert to numpy array
data = dataset.values

# split into input and output elements
X, y = data[:, :-1], data[:, -1]

# ensure all data are float values
X = X.astype('float32')

# prepare the imputer
imputer = SimpleImputer(strategy='mean')

# fit on the dataset
imputer.fit(X)

# transform the dataset
Xtrans = imputer.transform(X)

# summarize total missing
print('Missing: %d' % sum(isnan(X).flatten()))
# summarize total missing
print('Missing: %d' % sum(isnan(Xtrans).flatten()))

四、總結

本文介紹了Keras中的數據預處理類和數據預處理的幾種常用方法。不同的數據預處理方法對於不同的深度學習模型會產生不同的影響,因此在實際應用中,我們需要根據模型需求和數據集特性來選擇合適的預處理方式。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/301497.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:09
下一篇 2024-12-30 16:09

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29

發表回復

登錄後才能評論