Cтруктурирование любого проекта глубокого обучения.
Предварительная обработка и загрузка данных. Как мы уже говорили, данные являются ключом к работе нейронной сети, и нам необходимо обработать их перед подачей в нейронную сеть. На этом этапе мы также визуализируем данные, которые помогут нам получить представление о данных.
Определить модель. Теперь нам нужна модель нейронной сети. Это означает, что нам нужно указать количество скрытых слоев в нейронной сети и их размер, размер входа и выхода.
Потери и оптимизатор. Теперь нам нужно определить функцию потерь в соответствии с нашей задачей. Нам также необходимо указать оптимизатор для использования со скоростью обучения и другие гиперпараметры оптимизатора.
Подходящая модель — это этап обучения нейронной сети. Здесь нам нужно определить количество эпох, на которое нам нужно обучить нейронную сеть.
После обучения модели мы можем протестировать ее на тестовых данных, чтобы проверить, нет ли случая переобучения. Мы можем сохранить веса модели и использовать их позже, когда это необходимо.
*********************************
model.add используется для добавления слоя в нашу нейронную сеть. Нам нужно указать в качестве аргумента, какой тип слоя мы хотим. Dense используется для указания полносвязного слоя. Аргументами Dense являются выходное измерение, которое равно 16 в первом случае, входное измерение, которое равно 20 для входного измерения, и используемая функция активации, которая в этом случае является relu. Второй и третий слои аналогичны, нам не нужно указывать входное измерение, поскольку мы определили модель как последовательную, поэтому keras автоматически будет считать входное измерение таким же, как и выходное значение последнего слоя, т.е. 16. В третьем слое (выходном слое) выходное измерение равно 4 (количество классов). Теперь, как мы обсуждали ранее, выходной слой принимает разные функции активации, и в случае многоклассовой классификации это softmax.
***********************************
train.csv загружен в Exсel
Code 1
(.env) [boris@fedora34server DATASET]$ cat trainKerasPlot.py
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
dataset = pd.read_csv('train.csv') #You need to change #directory accordingly
# Changing pandas dataframe to numpy array
X = dataset.iloc[:,:20].values
y = dataset.iloc[:,20:21].values
# Normalizing the data
sc = StandardScaler()
X = sc.fit_transform(X)
# Next step is to one hot encode the classes
ohe = OneHotEncoder()
y = ohe.fit_transform(y).toarray()
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.1)
# Model layers
model = Sequential()
model.add(Dense(16, input_dim=20, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(4, activation='softmax'))
adam = Adam()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
y_pred = model.predict(X_test)
# Converting predictions to label
pred = list()
for i in range(len(y_pred)):
pred.append(np.argmax(y_pred[i]))
# Converting one hot encoded test label to label
test = list()
for i in range(len(y_test)):
test.append(np.argmax(y_test[i]))
a = accuracy_score(pred,test)
print('Accuracy is:', a*100)
history = model.fit(X_train, y_train,validation_data = (X_test,y_test), epochs=100, batch_size=64)
plt.figure(1)
plt.subplot(211)
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('Model Accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Training', 'Validation'], loc='lower right')
plt.subplot(212)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model Loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Training', 'Validation'], loc='upper right')
plt.tight_layout()
plt.show()
References
https://towardsdatascience.com/building-our-first-neural-network-in-keras-bdc8abbc17f5
No comments:
Post a Comment