Сомнения по поводу уменьшения или изменения массива файлов набора данных MNIST - PullRequest
1 голос
/ 07 июня 2019

Я все еще новичок в машинном обучении, в настоящее время изучаю набор данных MNIST и то, как манипулировать ими в python через книгу Майкла Нильсена: «Нейронные сети и глубокое обучение» и застрял в манипуляциях с файлом рассола.

Исходя из буклета Нильсена, я изначально пытаюсь создать три переменные (training_data, validation_data и test_data), которые получают соответствующие данные из файла pickle и уменьшают их до: 20 изображений x 1 столбец, 15 изображений x 1 столбец , 15 изображений x 1 столбец соответственно, как показано ниже:

def load_data_wrapper():

    tr_d, va_d, te_d = load_data() #Calls the load_data method that open and load the pickle file: mnist.pkl.gz that contains the full MNIST dataset 
    training_inputs = [np.reshape(x, (20, 1)) for x in tr_d[0]] 
    training_results = [vectorized_result(y) for y in tr_d[1]] 
    training_data = zip(training_inputs, training_results)
    validation_inputs = [np.reshape(x, (15, 1)) for x in va_d[0]] 
    validation_data = zip(validation_inputs, va_d[1]) 
    test_inputs = [np.reshape(x, (15, 1)) for x in te_d[0]] 
    test_data = zip(test_inputs, te_d[1]) 
    return (training_data, validation_data, test_data)

но отображается следующая ошибка:

ipdb> ValueError: cannot reshape array of size 784 into shape (10,1)

Но если я делаю код с np.reshape(x, (784, 1)), то есть с исходным размером массива (784 изображения x 1 столбец), он работает нормально, я собираюсь сделать это, потому что я пытаюсь отладить весь проект, чтобы понять, как рассчитывается процент, и функциональность нейронных сетей в глубине уже 70000 изображений трудно отлаживать и напрямую переходить к процентному результату, показанному в этой функции:

def SGD(self, training_data, epochs, mini_batch_size, eta,
        test_data=None):
    training_data = list(training_data)
    n = len(training_data)

    if test_data:
        test_data = list(test_data)
        n_test = len(test_data)

    for j in range(epochs):
        random.shuffle(training_data)
        mini_batches = [
            training_data[k:k+mini_batch_size]
            for k in range(0, n, mini_batch_size)]
        for mini_batch in mini_batches:
            self.update_mini_batch(mini_batch, eta)
        if test_data:
            print("Epoch {} : {} / {}".format(j,self.evaluate(test_data),n_test));
        else:
            print("Epoch {} complete".format(j))

Итак, я хочу знать, есть ли способ уменьшить размер линий травления (изображения, которые необходимо обучить, проверить и протестировать) или изменить / отредактировать данные травления, и есть ли альтернативный способ перемещения MNIST с меньшим количеством входных нейронов? Моя цель состоит в том, чтобы в будущем подготовить другой набор данных, который я разделил со мной в формате CSV с несколькими столбцами и строками и преобразовать его в рассол. Заранее спасибо!

...