本篇將會介紹 Kaggle 針對 CNN 在一個 Keras上的研究,https://www.kaggle.com/bustam/cnn-in-keras-for-kannada-digits 本篇參考本文,也請各位上去支持。
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
import tensorflow as tf
from sklearn.model_selection import train_test_split
import keras
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from keras.layers import LeakyReLU
from keras.layers.normalization import BatchNormalization
from tensorflow.keras.callbacks import LearningRateScheduler
from tensorflow.keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt
train = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')
test = pd.read_csv("/kaggle/input/Kannada-MNIST/test.csv")
Dig_MNIST = pd.read_csv("/kaggle/input/Kannada-MNIST/Dig-MNIST.csv")
sample_sub = pd.read_csv("/kaggle/input/Kannada-MNIST/sample_submission.csv")
print("Train set shape = " +str(train.shape))
print("Test set shape = " +str(test.shape))
print("Dif set shape = " +str(Dig_MNIST.shape))
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(64, (3,3), padding='same', input_shape=(28, 28, 1)),
tf.keras.layers.BatchNormalization(momentum=0.5, epsilon=1e-5, gamma_initializer="uniform"),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.Conv2D(64, (3,3), padding='same'),
tf.keras.layers.BatchNormalization(momentum=0.1, epsilon=1e-5, gamma_initializer="uniform"),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Conv2D(128, (3,3), padding='same'),
tf.keras.layers.BatchNormalization(momentum=0.2, epsilon=1e-5, gamma_initializer="uniform"),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.Conv2D(128, (3,3), padding='same'),
tf.keras.layers.BatchNormalization(momentum=0.1, epsilon=1e-5, gamma_initializer="uniform"),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Conv2D(256, (3,3), padding='same'),
tf.keras.layers.BatchNormalization(momentum=0.2, epsilon=1e-5, gamma_initializer="uniform"),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.Conv2D(256, (3,3), padding='same'),
tf.keras.layers.BatchNormalization(momentum=0.1, epsilon=1e-5, gamma_initializer="uniform"),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256),
tf.keras.layers.LeakyReLU(alpha=0.1),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(10, activation='softmax')
])
model.summary()
上方程式碼從最前面將資料往外匯入,資料進來之後,中間有將資料秀出以及做出整理,最後才透過 Keras 的功能,那麼 Keras 那底對資料做什麼事情呢?其實 Keras 只是一個神經網路之一,那這個神經網路是一個進階的神經網路形式,簡單來說它是一個可以建模的樣子,將一個資料透過 Keras 內部程式的參數設定完畢之後,設定出來的 model 就是一個可以直接訓練的模組,不過這也要看個人寫的方式如何,因為雖然他是可以訓練,如果這份資料不太OK的話,訓練的方式也不對,就算你用了 Keras 也不會更好的,所以基本上意思是說基本功要做好,不然用了很多好的模組基本上出來的結果基本上不會是你想要的,只是你可以看出你要的一些動作出來是可以的。
那麼在這謝謝大家,以上為不專業的AI介紹,明日就最後一天了,我會將完整的打磚塊程式狀況直接PO出來給大家看,那我們下篇見摟~~~~~~
參考資料:https://www.kaggle.com/bustam/cnn-in-keras-for-kannada-digits
https://ithelp.ithome.com.tw/articles/10191627