Ввод / вывод Keras

#python #machine-learning #tensorflow #keras

#питон #машинное обучение #тензорный поток #keras

Вопрос:

Я борюсь с проблемой в Tensorflow / keras, было бы здорово, если бы кто-нибудь мог мне помочь.

Я построил нейронную сеть в Keras с input_dim=3, затем 10 нейронов и вывод 1.

Входные данные представляют собой 3D-вектор с плавающей запятой, выходные данные должны быть простым значением с плавающей запятой.

Моя проблема в том, что я не знаю, как должны быть отформатированы числа с плавающей запятой (> 1, от 0 до 1? И т. Д.) И какая функция потерь может сработать для этой задачи (ничего двоичного, я думаю). Я хочу, чтобы нейронная сеть вычисляла из 3D-вектора простое значение с плавающей запятой. Но это никогда не срабатывает, потому что мои выходные данные всегда одинаковы.

Если я что-то забыл, пожалуйста, дайте мне знать, если у вас есть какие-то идеи, это было бы здорово!

Приветствую

Редактировать: я осознаю тот факт, что мне нужно введение во всю тему машинного обучения, чем я сейчас и занимаюсь. В то же время я хотел бы знать, как использовать keras для проверки / практического использования машинного обучения. Я прошу прощения за то, что задаю «глупые» вопросы, но я надеюсь, что, может быть, кто-нибудь сможет мне помочь.

Ввод: я думаю, что ввод может быть «неправильно» отформатирован, не нормализован и т.д., Но я преобразовал полученные значения в интервал, указанный ниже.

Это моя простая модель:

 model = Sequential()
model.add(Dense(10, input_dim=3, init='normal', activation='sigmoid'))
model.add(Dense(1, init='normal', activation='sigmoid'))
model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])
model.fit(X_Train, Y_Train, nb_epoch=100, batch_size=32, verbose=1)
 

X_Train и Y_Train — это значения, извлеченные из CSV-файла. Например, моими входными значениями являются [a,b,c, d], где 0 < a,b,c < 1 и -1 < d < 1 (d — вывод).

Выходной сигнал:

Эпоха 500/500

32/32 [==============================] — 0s — потеря: 0.0813 — acc: 0.0000e 00

Пример (случайно сгенерированные значения), все выходные данные почти одинаковы около 0,43:

[ 0.97650245 0.30383579 0.74829968] [[ 0.43473071]]

[ 0.94985165 0.75347051 0.72609185] [[ 0.43473399]]

[ 0.18072594 0.18540003 0.20763266] [[ 0.43947196]]

Комментарии:

1. пожалуйста, поделитесь некоторым кодом (возможно, в качестве сути git) и точным выводом. что означает «Но это никогда не срабатывает, потому что мои результаты всегда одинаковы»? Как можно сказать вам, почему они одинаковы, не видя вашего кода?

2. Из словаря, который вы используете, я полагаю, вам было бы полезно хорошее введение в суть машинного обучения. Например. понятие форматирования входных векторов в ML не кажется знакомым. Нормализуется , да

Ответ №1:

Во-первых, нет необходимости в нормализации (или форматировании) входных выборок.

Во-вторых, для проблемы нулевой точности это связано с тем, что вы использовали «точность» в качестве метрики, которая используется для модели классификации. В вашем случае вы должны использовать что-то вроде «mse» или «mae» (в Keras) в качестве метрик в вашем методе компиляции, например,

 model.compile(loss='mse', optimizer='sgd', metrics=['mae'])
 

Ответ №2:

Я отвечаю на свой собственный вопрос:

Проблема здесь в оптимизаторе! Обучающие данные и все остальные настройки не так уж важны. Вы должны попробовать другие оптимизаторы, чтобы изменить результаты. Теперь можно закрыть этот вопрос. Спасибо вам за вашу помощь!

Ответ №3:

Измените свой выходной слой на следующий model.add(Dense(1))

Смотрите Это руководство по регрессии, в котором рассказывается об одном выходе. https://www.tensorflow.org/tutorials/keras/basic_regression