Saturday, March 20, 2021

Keras - LeNet

 Keras - LeNet

2021/03/20

-----

說明:

# 為本來的註解

## 為新增的註解

-----

## LeNet

#coding=utf-8

## utf-8 平衡 unicode 與 ASCII,且效率較 unicode 高。

## https://zh.wikipedia.org/wiki/UTF-8 

from keras.models import Sequential

## 一個空的網路,可以後續添加各種層。method 則有好幾個預設的可以使用。add()、pop()、summary() 等等。

## https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/

## https://keras-cn.readthedocs.io/en/latest/models/sequential/

## https://keras.io/zh/getting-started/sequential-model-guide/

## https://keras.io/guides/sequential_model/

## https://keras.io/api/models/sequential/

from keras.layers import Dense,Flatten

## Dense 是全連接層,進 Dense 之前要先進 Flatten 展平。

## https://keras.io/api/layers/reshaping_layers/flatten/

from keras.layers.convolutional import Conv2D,MaxPooling2D

from keras.utils.np_utils import to_categorical

import cPickle

## cPickle。pickle 是 Python 的標準函式庫之一。cPickle 是 C 語言的版本。序列化,主要有 load() 與 dump() 兩個函數。

## https://docs.python.org/3/library/pickle.html

## https://blog.csdn.net/dcrmg/article/details/78180692

import gzip

## gzip 是 Python 的標準函式庫之一。

## https://docs.python.org/zh-tw/3/library/gzip.html

import numpy as np

seed = 7

np.random.seed(seed)

 

data = gzip.open(r'/media/wmy/document/BigData/kaggle/Digit Recognizer/mnist.pkl.gz')

train_set,valid_set,test_set = cPickle.load(data)

## cPickle.load(data)。將原始的資料集序列化之後,載入記憶體。

#train_x is [0,1]

train_x = train_set[0].reshape((-1,28,28,1))

## 「newshape int or tuple of ints。The new shape should be compatible with the original shape. If an integer, then the result will be a 1-D array of that length. One shape dimension can be -1. In this case, the value is inferred from the length of the array and remaining dimensions.」-1 表示要轉換資料長度未定,格式則根據後續的設定轉換。以此例而言。-1 表示 train_set[0],也就是 train_x 的長度不知道。反正就是把全部的資料轉成 28 x 28 x 1 就對了。

## https://numpy.org/doc/stable/reference/generated/numpy.reshape.html

## https://blog.csdn.net/wld914674505/article/details/80460042

train_y = to_categorical(train_set[1])

 

valid_x = valid_set[0].reshape((-1,28,28,1))

valid_y = to_categorical(valid_set[1])

 

test_x = test_set[0].reshape((-1,28,28,1))

test_y = to_categorical(test_set[1])

 

model = Sequential()

model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))

## kernel_initializer。uniform 似乎是舊版的參數。不在說明文檔裡面。

## https://keras.io/zh/initializers/

## https://zh.wikipedia.org/wiki/%E9%80%A3%E7%BA%8C%E5%9E%8B%E5%9D%87%E5%8B%BB%E5%88%86%E5%B8%83

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))

## padding。valid:卷積後特徵圖縮小。same:卷積後特徵圖不縮小。

## https://oldpan.me/archives/tf-keras-padding-vaild-same

model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())

model.add(Dense(100,activation='relu'))

model.add(Dense(10,activation='softmax'))

model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'])

## accuracy。「對於任何分類問題,你都希望將其設置為 metrics = ['accuracy']。評估標準可以是現有標準的編碼標識符,也可以是自定義的評估標準函數。」

## https://keras.io/zh/getting-started/sequential-model-guide/

model.summary()

## model.summary()。用文字顯示模型各層的參數狀態。

## https://blog.csdn.net/ybdesire/article/details/85217688

model.fit(train_x,train_y,validation_data=(valid_x,valid_y),batch_size=20,epochs=20,verbose=2)

## verbose。「verbose = 2 為每個 epoch 輸出一行記錄。」

## https://www.jianshu.com/p/159a9ac413fa

#[0.031825309940411217, 0.98979999780654904]

print model.evaluate(test_x,test_y,batch_size=20,verbose=2)

-----

————————————————

版权声明:本文为CSDN博主「wmy199216」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wmy199216/article/details/71171401

-----

No comments: