Sunday, March 27, 2022

Building MultiLayers neural network in keras with several outputs

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