Я все еще новичок в машинном обучении, в настоящее время изучаю набор данных 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 с несколькими столбцами и строками и преобразовать его в рассол. Заранее спасибо!