Реализация пользовательских входов в нейронную сеть - PullRequest
0 голосов
/ 30 июня 2018

У меня есть некоторые теоретические вопросы наряду с моим первоначальным вопросом.

Я очень новичок в Керасе, и у меня возникли некоторые логические вопросы. Первый вопрос касается поезда, теста и т. Д. Я пришел с использованием Sci-kit learn и обычно использую библиотеку test_train_split, чтобы сделать это (я предполагаю, что я могу сделать то же самое здесь?)

Мой следующий вопрос будет о трансформации функций и меток. Насколько я понимаю, мы не можем кормить строки в нейронную сеть, так что нужно было бы сделать какую-то номализацию.

Я узнал либо токенизацию, либо фиктивные переменные для категориальных переменных, для числовых значений следует выполнить нормализацию. Мой вопрос с этим: есть 5 столбцов (2 категориальных и 3 числовых) в векторе признаков. Могу ли я создать фиктивные переменные для 2 категориальных, а затем нормализовать ВЕСЬ вектор признаков?

После этого мой вопрос будет в приведенном ниже коде о input_shape (x, y). Пример кода ниже от распознавания изображения. Скажите, что я хочу использовать свой собственный набор данных, должен ли я заранее знать input_shape и определять его таким образом? Или это то, чему модель может научиться сама?

Мой последний вопрос был бы таков: скажем, что вектор признаков состоит из переменных a, b, c и d. Как я могу сделать так, чтобы пользователь ввел их значения для a, b, c и d, и чтобы модель выдала вывод? В этом примере модель была загружена из CSV в информационный фрейм, а затем я плюнул эти данные в тестирование и обучение для функций и меток. В этом случае нужно ли хранить переменные пользователя в кадре данных, чтобы модель могла предсказать вывод?

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

from keras.datasets import mnist
from keras import models
from keras import layers

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

model = model.Sequential()
model.add(layers.Dense(16, activation = 'relu', input_shape = (10000,)))
model.add(layers.Dense(16, activation = 'relu'))
model.add(layers.Dense(1, activation = 'sigmoid'))

model.compile(optimizer= 'rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)

test_loss, test_acc = model.evaluate(test_images, test_labels)

Любая помощь будет великолепна, так как я новичок в этом!

1 Ответ

0 голосов
/ 30 июня 2018

Я пришел с помощью Sci-kit learn и обычно использую для этого библиотеку test_train_split (я предполагаю, что я могу сделать то же самое здесь?)

Да! Не должно иметь никакого значения

Насколько я понимаю, мы не можем подавать нити в нейронную сеть, поэтому необходимо выполнить какую-то нумерацию.

Правильно. Нейронная сеть - это просто множество математических операций над числами. При этом вы можете представлять строки в виде чисел (Google word2vec для получения дополнительной информации)

[T] здесь 5 столбцов (2 категориальных и 3 числовых) в векторе признаков. Могу ли я создать фиктивные переменные для 2 категориальных, а затем нормализовать ВЕСЬ вектор признаков?

Я бы предположил, что под категориальным вы подразумеваете классы? Классы никогда не должны входить в сеть как функции. Тогда классификация не будет иметь никакого смысла. Если вы просто хотите сделать прогноз, вы можете просто посмотреть на model.predict.

Пример кода, приведенный ниже, относится к распознаванию изображений. Скажите, что я хочу использовать свой собственный набор данных, должен ли я заранее знать input_shape и определять его таким образом? Или это то, чему модель может научиться сама?

Нейронные сети - это сгустки матричных умножений. Вам нужно будет предоставить некоторые размеров. Для этого не требуется предварительное знание размера batch_size (хотя вы могли бы его указать), но важны другие измерения: то есть количество объектов во входном слое. input_shape = (10000,) в коде - это просто сокращение для input_shape = (10000,None), где None - это место, где вы могли бы указать размер пакета (количество точек данных). 10000 - это количество функций, в данном случае.

Как я могу заставить пользователя ввести свои значения для a, b, c и d и сделать так, чтобы модель выдала вывод?

Просто отметьте, что дело в том, что вы заранее не знаете результатов.

oneToFive=input("Enter 5 numbers separated by commas")
oneToFive=oneToFive.split(",")
oneToFive=[np.float32(c) for c in oneToFive]
model.predict(x=np.array(oneToFive))

Я бы порекомендовал вам взглянуть на теорию, стоящую за этим. Просто слепо бегать, вероятно, очень раздражает, потому что вам будет очень трудно получить хорошие результаты. И даже если вы получили хорошие результаты, они часто могут быть не такими хорошими, как вы думаете. Одно место для чтения - книга Яна Гудфеллоу по глубокому обучению .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...