Рубрики
Без рубрики

Мода Mnist с не очень глубоким обучением

Привет, Девз! Это пост об использовании «знаний», полученных из части 1 глубокого обучения с Pyth … Tagged с помощью машинного обучения, Python, Keras.

Привет, Девз!

Это пост об использовании «знаний», полученных от части 1 Глубокое обучение с Python Книга для классификации Мода Mnist Images который представляет собой набор данных из 60 000 изображений.

Это действительно расширение МИСТИЧЕСКИЙ ЗАКАЗАТЕЛЬСКИЕ ДИАЦИИ Для идентификации различных носимых продуктов, пальто, рубашки, обуви и т. Д.

Как вы можете видеть из заголовка, я не использовал более глубокую часть DL, которая представляет собой сверточные нейронные сети, и, честно говоря, просто вынудил несколько комбинаций, пока я не получу наилучшую точность в тестовых данных.

Я использовал комбинацию следующего и взял ту, которая имела самую высокую точность теста:

  1. Несколько скрытых слоев
  2. Комбинация нескольких единиц в этих скрытых слоях
  3. Несколько комбинаций единиц в первом слое

Лучшей моделью было 1 скрытый слой с 128 единицами и 512 единицами во внешнем слое и точность 89,04%.

Это не так, как это должно быть сделано, поскольку ресурсы ограничены в реальном мире для работы над реальными, жесткими проблемами ML! 😞

Код

from keras import models
from keras import layers
from keras.datasets import fashion_mnist
import numpy as np
import matplotlib.pyplot as plt
from keras.utils import to_categorical, plot_model
import operator

(train_x, train_y), (test_x, test_y) = fashion_mnist.load_data()

def shape(arr):
    x = np.reshape(arr, (len(arr), 784))
    return x

#epochs
e = 40

#prediction array
eval_arr = {}
pred_arr = {}


#label summary
label_list = {0: 'T-shirt/top', 1: 'Trouser', 2:'Pullover', 3:'Dress', 4:'Coat', 5:'Sandal', 6:'Shirt', 7:'Sneaker', 8:'Bag', 9:'Ankle boot'}

#path
output_dir_model = r'C:\Users\karan.verma\.spyder-py3\deep-learning\models'

train_x_reshaped = shape(train_x).astype('float32')/255
train_y = to_categorical(train_y)
train_y = train_y.astype('float32')

test_x_reshaped = shape(test_x).astype('float32')/255
test_y = to_categorical(test_y)
test_y = test_y.astype('float32')

#take out validation data, 25% = 15,000 samples

partial_train_x = train_x_reshaped[:int(len(train_x_reshaped)*0.75)]
partial_train_y = train_y[:int(len(train_y)*0.75)]

val_x = train_x_reshaped[int(len(train_x_reshaped)*0.75):]
val_y = train_y[int(len(train_y)*0.75):]

# run model with several different parameters

#lyrs = [1, 2]
#units_out = [512, 256, 128, 64, 32, 16]
#units_in = [128, 64, 32, 16]

lyrs = [1]
units_out = [512]
units_in = [128]

#make model
for lyr in lyrs:
    for unit_out in units_out:
        for unit_in in units_in:

            print('Running model having %d hidden layers & %d units in each hidden layer and %d units in the outer layer' % (lyr, unit_in, unit_out))

            model = models.Sequential()
            model.add(layers.Dense(unit_out, activation='relu', input_shape=(784,)))

            for i in range(lyr):
                model.add(layers.Dense(unit_in, activation='relu'))

            model.add(layers.Dense(10, activation = 'sigmoid'))

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

            #model fit

            history = model.fit(partial_train_x,
                                partial_train_y,
                                epochs = e,
                                batch_size=512,
                                validation_data=(val_x, val_y),
                                verbose = 1)

            acc_list = history.history
            fig, ax = plt.subplots(2,1, figsize=(20, 10))

            plt.subplot(211)
            plt.plot(np.arange(1, e+1), acc_list['loss'], label='Training Loss')
            plt.plot(np.arange(1, e+1), acc_list['val_loss'], label='Validation Loss')
            plt.title('Loss Graph')
            plt.xlabel('Epochs')
            plt.ylabel('Loss')
            plt.legend()

            plt.subplot(212)
            plt.plot(np.arange(1, e+1), acc_list['acc'], label='Training Acc')
            plt.plot(np.arange(1, e+1), acc_list['val_acc'], label='Validation Acc')
            plt.title('Accuracy Graph')
            plt.xlabel('Epochs')
            plt.ylabel('Accuracy')
            plt.legend()

            #plt.tight_layout()
            fig.savefig('{}/Model having %d hidden layers & %d units in each hidden layer and %d units in the outer layer.png'.format(output_dir_model) % (lyr, unit_in, unit_out))            
            plt.clf()

            eval_arr['Model having %d hidden layers & %d units in each hidden layer and %d units in the outer layer' % (lyr, unit_in, unit_out)] = model.evaluate(test_x_reshaped, test_y)
            pred_arr['Model having %d hidden layers & %d units in each hidden layer and %d units in the outer layer' % (lyr, unit_in, unit_out)]= np.argmax(model.predict(test_x_reshaped), axis=1)

#get best model from eval_arr
best_model = {}
k = ''

for key, val in eval_arr.items():
    best_model[key] = val[1]

print('The best model is: {}'.format(max(best_model.items(), key=operator.itemgetter(1))))

#Building Prediction Pipeline
#('Model having 1 hidden layers & 128 units in each hidden layer and 512 units in the outer layer',0.8953) but it varies

prediction = model.predict(test_x_reshaped)

print('Random samples from the test data: ')
fig, ax = plt.subplots(2, 3, figsize=(20, 10))
for i in range(1, 7):
        c = np.random.choice(len(test_x_reshaped))
        plt.subplot(2,3,i)
        plt.imshow(test_x[c])
        plt.title('Original {} & Predicted {}'.format(label_list[np.argmax(test_y[c])], label_list[np.argmax(prediction[c])]))        

Выходной график

Ключевые выводы

  1. Если вы работаете над проблемой ML, потратьте время на понимание графиков, в противном случае это не имеет никакого смысла
  2. Попробуйте проблемы за пределами книги/учебника и т. Д.
  3. Реализуйте вещи самостоятельно без каких -либо руководств, это сделает ваш мозг большим, но вы узнаете.
  4. Застряйте несколько раз, Google Google, заставьте его работать и перейдите к разделу 2 книги! 😂

Ссылка на код Анкет

** РЕДАКТИРОВАТЬ: Всегда забывайте, но все вопросы, комментарии, критика искренне приветствуются! 😃

Хорошего вам дня!

Оригинал: “https://dev.to/hydroweaver/fashion-mnist-with-not-so-deep-learning-16el”