1. 程式人生 > >Keras學習---資料預處理篇

Keras學習---資料預處理篇

1. 資料預處理是必要的,這裡以最簡單的MNIST dataset的輸入資料預處理為例。 
    A. 設定隨機種子 
    np.random.seed(1337)  # for reproducibility     B. 輸入資料維度規格化,這裡每個樣本只是size為784的一維陣列。
    X_train = X_train.reshape(60000, 784)    將類別標籤轉換為one-hot encoding, 這一步對多分類是必須的
   one_hot_labels  = keras.utils.np_utils.to_categorical(labels, num_classes=10)    train sets 和test sets可能需要shuffle處理?
   C. 輸入資料型別轉換,數值歸一化    X_train = X_train.astype('float32')
   X_train /= 255    MNIST dataset的MLP完整程式碼如下:
'''Trains a simple deep NN on the MNIST dataset.



Gets to 98.40% test accuracy after 20 epochs

(there is *a lot* of margin for parameter tuning).

2 seconds per epoch on a K520 GPU.

'''



from __future__ import print_function

import numpy as np

np.random.seed(1337)  # for reproducibility



from keras.datasets import mnist

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation

from keras.optimizers import SGD, Adam, RMSprop

from keras.utils import np_utils





batch_size = 128

nb_classes = 10

nb_epoch = 20



# the data, shuffled and split between train and test sets

(X_train, y_train), (X_test, y_test) = mnist.load_data()



X_train = X_train.reshape(60000, 784)

X_test = X_test.reshape(10000, 784)

X_train = X_train.astype('float32')

X_test = X_test.astype('float32')

X_train /= 255

X_test /= 255

print(X_train.shape[0], 'train samples')

print(X_test.shape[0], 'test samples')



# convert class vectors to binary class matrices

Y_train = np_utils.to_categorical(y_train, nb_classes)

Y_test = np_utils.to_categorical(y_test, nb_classes)



model = Sequential()

model.add(Dense(512, input_shape=(784,)))

model.add(Activation('relu'))

model.add(Dropout(0.2))

model.add(Dense(512))

model.add(Activation('relu'))

model.add(Dropout(0.2))

model.add(Dense(10))

model.add(Activation('softmax'))



model.summary()



#model.compile(loss='categorical_crossentropy',

#              optimizer=RMSprop(),

#              metrics=['accuracy'])

model.compile(loss='categorical_crossentropy',

              optimizer=SGD(lr=0.02),

              metrics=['accuracy'])


history = model.fit(X_train, Y_train,

                    batch_size=batch_size, nb_epoch=nb_epoch,

                    verbose=1, validation_data=(X_test, Y_test))

score = model.evaluate(X_test, Y_test, verbose=0)

print('Test score:', score[0])

print('Test accuracy:', score[1])

2. 如果輸入資料是影象,並且使用的是CNN模型,輸入資料的維度處理會稍微複雜些。 先了解下Keras 1.x中的image_dim_ordering引數。 “channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。 以128x128的RGB影象為例,“channels_first”應將資料組織為(3,128,128),而“channels_last”應將資料組織為(128,128,3)。 MNIST dataset的CNN模型完整程式碼如下,特別需要注意input_shape和X_train/X_test。
'''Trains a simple convnet on the MNIST dataset.



Gets to 99.25% test accuracy after 12 epochs

(there is still a lot of margin for parameter tuning).

16 seconds per epoch on a GRID K520 GPU.

'''



from __future__ import print_function

import numpy as np

np.random.seed(1337)  # for reproducibility



from keras.datasets import mnist

from keras.models import Sequential

from keras.layers import Dense, Dropout, Activation, Flatten

from keras.layers import Convolution2D, MaxPooling2D

from keras.utils import np_utils

from keras import backend as K



batch_size = 128

nb_classes = 10

nb_epoch = 12



# input image dimensions

img_rows, img_cols = 28, 28

# number of convolutional filters to use

nb_filters = 32

# size of pooling area for max pooling

pool_size = (2, 2)

# convolution kernel size

kernel_size = (3, 3)



# the data, shuffled and split between train and test sets

(X_train, y_train), (X_test, y_test) = mnist.load_data()
#import gzip
#from six.moves import cPickle
#path=r'C:\Users\ll\.keras\datasets\mnist.pkl.gz'
#f = gzip.open(path, 'rb')
#(X_train, y_train), (x_valid,y_valid),(X_test, y_test)  = cPickle.load(f, encoding='bytes')
#f.close()


if K.image_dim_ordering() == 'th':

    X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)

    X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)

    input_shape = (1, img_rows, img_cols)

else:

    X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)

    X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)

    input_shape = (img_rows, img_cols, 1)



X_train = X_train.astype('float32')

X_test = X_test.astype('float32')

X_train /= 255

X_test /= 255

print('X_train shape:', X_train.shape)

print(X_train.shape[0], 'train samples')

print(X_test.shape[0], 'test samples')



# convert class vectors to binary class matrices

Y_train = np_utils.to_categorical(y_train, nb_classes)

Y_test = np_utils.to_categorical(y_test, nb_classes)



model = Sequential()



model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],

                        border_mode='valid',

                        input_shape=input_shape))

model.add(Activation('relu'))

model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))

model.add(Activation('relu'))

model.add(MaxPooling2D(pool_size=pool_size))

model.add(Dropout(0.25))



model.add(Flatten())

model.add(Dense(128))

model.add(Activation('relu'))

model.add(Dropout(0.5))

model.add(Dense(nb_classes))

model.add(Activation('softmax'))



model.compile(loss='categorical_crossentropy',

             optimizer='adadelta',

              metrics=['accuracy'])



model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,

          verbose=1, validation_data=(X_test, Y_test))

score = model.evaluate(X_test, Y_test, verbose=0)

print('Test score:', score[0])

print('Test accuracy:', score[1])

相關推薦

Keras學習---資料處理

1. 資料預處理是必要的,這裡以最簡單的MNIST dataset的輸入資料預處理為例。      A. 設定隨機種子      np.random.seed(1337)  # for reproducibility     B. 輸入資料維度規格化,這裡每個樣本只是si

機器學習資料處理(sklearn庫系列函式)

【1】 sklearn.preprocessing.PolynomialFeatures PolynomialFeatures有三個引數 degree:控制多項式的度 interaction_

機器學習——資料處理

基礎 機器學習主要有兩種,監督學習和非監督學習。監督學習就是督促計算機去學習,明確告訴它目標是什麼,非監督學習是讓計算機“自學成才”,沒有設定目標,學習完告訴我你學到了什麼 1 # encoding=utf-8 2 3 from sklearn import linear_model 4 im

學習資料處理

# GB18030,全稱:國家標準GB18030 - 2005《資訊科技中文編碼字符集》,是中華人民共和國現時最新的內碼字集, # 是GB18030 - 2000《資訊科技資訊交換用漢字編碼字符集基本集的擴充》的修訂版。GB18030與GB2312 - 1980和GBK相容,共收錄漢字70244個

Python機器學習-資料處理技術 標準化處理、歸一化、二值化、獨熱編碼、標記編碼總結

資料預處理技術 機器是看不懂絕大部分原始資料的,為了讓讓機器看懂,需要將原始資料進行預處理。 引入模組和資料 import numpy as np from sklearn import preprocessing data = np.array([[3,-1.5,2,-5.4], &nbs

深度學習-----資料處理是必要的,一些經驗化的處理措施

資料歸一化 更多詳細資訊,參照網址:非常值得一看: http://blog.csdn.net/qq_26898461/article/details/50463052 http://blog.csdn.net/bea_tree/article/details/5

【深度學習資料處理2】使用Matlab批量生成聲譜圖

接上篇裁剪音樂檔案。給深度學習做資料準備,通過Matlab生成聲譜圖。 function cut_wavs(file_dir,output_dir,t,t_overlap) files=dir(file_dir); count=0; for i =3:le

閒扯淡之機器學習——資料處理

上篇文章我們針對ML閒扯了一番,並在最後又借鑑Data Mining的CRISP-DM模型分析了一個ML專案的開發過程。 今天說點什麼呢?我猶豫了,我迷茫了!先給大家講個故事吧! 有一天你的boss找到你說:XX聽說你對ML很熟悉啊,正好我們公司有很多*

機器學習 第2資料處理(缺失值)

在真實的世界中,缺失資料是經常出現的,並可能對分析的結果造成影響。我們需要了解資料缺失的原因和資料缺失的型別,並從資料中識別缺失值,探索資料缺失的模式,進而處理缺失的資料。本文概述處理資料缺失的方法。 一,資料缺失的原因 首先我們應該知道:資料為什麼缺失?資料的缺失是我們無法避免的,可能的原因有很多種,博主總

機器學習 第3資料處理(使用插補法處理缺失值)

插補法可以在一定程度上減少偏差,常用的插補法是熱卡插補、擬合插補和多重插補。擬合插補,要求變數間存在強的相關性;多重插補(MCMC法),是在高缺失率下的首選插補方法,優點是考慮了缺失值的不確定性。 一,熱卡插補 熱卡填充(Hot deck imputation)也叫就近補齊,對於一個包含空值的物件,熱卡填充法

機器學習 第4資料處理(sklearn 插補缺失值)

由於各種原因,現實世界中的許多資料集都包含缺失值,通常把缺失值編碼為空白,NaN或其他佔位符。但是,此類資料集與scikit-learn估計器不相容,這是因為scikit-learn的估計器假定陣列中的所有值都是數字,並且都存在有價值的含義。如果必須使用不完整資料集,那麼處理缺失資料的基本策略是丟棄包含缺失值

機器學習一:資料處理

最近一直在學習機器學習的知識,入門很難。之前跟著吳恩達老師的視訊在學習,發現還是有很多的知識點難以理解。前不久,《機器學習A-Z》出了中文翻譯,老師講的非常淺顯易懂,所以開始跟著學起來了。 為了能更系統的整理到學的知識進行一個整理,也作為一個自我監督,接下來就把較為系統的知識點都整理到部落格上。相應的程式碼

Python機器學習資料處理

# -*- coding: utf-8 -*- """ Created on Sat Sep 29 22:39:26 2018 @author: Lxiao217 email:[email protected] """ #資料預處理 #CSV(comma-srpared values,

機器學習中的資料處理

資料的預處理總共可以大致分為6步。 匯入需要的庫 這兩個是我們每次都需要匯入的庫 Numpy包含數學計算函式 Pandas用於匯入和管理資料集 匯入資料集 資料集通常是.csv格式。csv檔案以文字形式儲存表格資料。檔案的每一行是一條資料記錄。我們使用pandas的r

程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之資料匯入&資料處理(上)

程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.ipynb 下一篇有一些資料的

程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之資料匯入&資料處理(下)

這篇主要是進行程式碼中的一些數值視覺化,幫助理解 程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_re

【ECG理論】(2)AI實現心律失常判別:心電資料處理

我們做心律失常判別的第一步就是拿到資料後,對心電資料進行預處理,資料預處理的核心重點就是去除噪聲。那麼,我們首先就要了解一下心電資料中的噪聲來源 心電訊號資料中的噪聲來源 心電訊號資料中的噪聲主要可以分為三類:工頻干擾,基線漂移,肌電干擾 工頻干擾:工頻干擾主要是由

機器學習100天——資料處理(第一天)

有個叫Avik Jain的老外在github上發起了一個100天學習機器學習的專案,每天花一個小時學習機器學習,學習內容由淺入深。今天是第一天,內容是如何進行資料預處理。該教程的程式語言是Python。 資料預處理分為6步: 第一步:匯入NumPy和Pandas庫。NumPy和Pandas是每次都

《深度學習網路訓練--第一講》資料採集與資料處理

經過專案的實踐,我感受到要想訓練出一個性能優良的模型網路,資料採集與預處理是多麼的艱難與重要。 資料的採集 資料的採集是一個費時費力的過程。對於人臉資料來說,針對產品的應用場景,需要採集不同環境變數的人臉影象。對於我的經驗來說,公司想要做一個人臉識別的A

資料處理程式碼分享——機器學習資料探勘

資料預處理分為6步: 第1步:匯入NumPy和Pandas庫。NumPy和Pandas是每次都要匯入的庫,其中Numpy包含了數學計算函式,Pnadas是一個用於匯入和管理資料集(Data Sets)的類庫。 第2步:匯入資料集。資料集一般都是.csv格式,csv