Форум программистов, компьютерный форум, киберфорум
Искусственный интеллект
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
1

Обработка данных с использованием нейронной сети?

12.12.2020, 18:45. Показов 2315. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет,
При боработке моих данных я использовал нейронную сеть с 2-6-1 (2 входящие нейроны, 6 скрытых нейронов, 1 выходящий нейрон). Но не знаю как выбрать функции активации для получения хорших результатов ! Я программировал на языке Python с помощью библиотеки Keras, это мои коды:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# first neural network with keras make predictions
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LeakyReLU
 
# load the dataset
dataset = loadtxt('KQ.txt', delimiter=',')
 
# split into input (X) and output (y) variables
X = dataset[:,0:2]
y = dataset[:,2]
 
# define the keras model
model = Sequential()
model.add(Dense(6, input_dim=2, activation='softsign'))
model.add(Dense(1, LeakyReLU(alpha=0.1)))
 
# compile the keras model
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
 
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10, verbose=0)
 
# evaluate the keras model
ll, accuracy = model.evaluate(X, y)
print('Loss: %.2f' % ll)
print('Accuracy: %.2f' % (accuracy*100))
 
# make class predictions with the model
predictions = model.predict(X)
 
# summarize the first 5 cases
for i in range(10):
    print('%s => %0.4f (expected %0.4f)' % (X[i].tolist(), predictions[i], y[i]))
Во вложении есть данный файл KQ.txt, где: 2 входящие нейроны являются 2 первые столбцы в файле, и последний столбец - выходящий нейрон.
Это мои результаты:
Код
Accuracy: 0.00
[1402.37, 5.7497] => 1.0043 (expected 1.6435)
[1402.46, 6.4661] => 1.0043 (expected 0.9520)
[1402.55, 7.3768] => 1.0043 (expected 0.9508)
[1402.66, 8.2583] => 1.0043 (expected 1.3669)
[1402.78, 9.1954] => 1.0043 (expected 0.9791)
[1402.91, 10.1366] => 1.0043 (expected 0.9775)
[1402.39, 5.8727] => 1.0043 (expected 0.9725)
[1402.48, 6.7135] => 1.0043 (expected 1.1448)
[1402.58, 7.6265] => 1.0043 (expected 1.4263)
[1402.69, 8.4922] => 1.0043 (expected 0.9590)
Но эти очень плохо !
Как лучший вариант для получения результатов близких к входящим данным (в файле)? Хотел мнения ваши. Спасибо огромное !
Вложения
Тип файла: txt KQ.txt (3.2 Кб, 13 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2020, 18:45
Ответы с готовыми решениями:

Нормализация данных для нейронной сети
У меня есть вопрос, как нормализовать данные для нейронной сети? Нейронная сеть и описание проблемы...

Обработка данных с использованием нейронной сети
Здравствуйте всем! Возник такой вопрос. Пишу программу по клавиатурному почерку. На выходе имею...

Обработка базы данных Титаника для подготовки к реализации нейронной сети
Я решил сделать нейронную сеть, реализовать на Python Backpropagation algorithm (узнал о нём совсем...

Обработка звука для нейронной сети
Добрый день. Вообщем имеется n файлов на каждом из которых записано одно слово(по одному слову на...

25
672 / 546 / 74
Регистрация: 20.09.2014
Сообщений: 3,550
12.12.2020, 19:09 2
А почему вы думаете, что функция активации - это очень важно?
Лучше размер батча увеличьте, а количество эпох уменьшите.

Сейчас код весь посмотрю, у вас нейронка не улучшения требует, а воскрешения из мертвых))).

Добавлено через 6 минут
Аа, забыл свою первую мысль, которая возникла при прочтении поста... Собственно нормировать данные вы не хотите? Это более важно, чем функция активации.
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
12.12.2020, 19:16  [ТС] 3
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Собственно нормировать данные вы не хотите? Это более важно, чем функция
Спасибо вам огромное. Так, я очень хочу нормировать данные.Скажите, как нормировать, пожалуйста.
0
672 / 546 / 74
Регистрация: 20.09.2014
Сообщений: 3,550
12.12.2020, 19:25 4
Неожиданный вопрос. Вы как этот код получили?

Нормализация - это приведение входных данных к диапазону [0.0, 1.0]. Можно просто найти максимум и минимум каждого столбца и отмасштабировать все числа.

Дёрнул из сети какой-то стандартный код:
Python
1
2
3
mean = np.mean(X, axis = 0)
std = np.std(X, axis = 0)
X = [(x - mean)/std for x in X]
Только не забудьте, что у вас два столбца в X.
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
12.12.2020, 20:20  [ТС] 5
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Неожиданный вопрос. Вы как этот код получили?
Привет, я иностранец. По-Русски немного понимаю. Хочу говорить, что я посмотрел нескооько кодов в интернете и внедрил их в моем случае. Но я не знал, что данные надо нормировать перед использованием нейронной сети до того как встречить ваши мнения выше. Извините, я инженер по механике ! И эти знания совсем новые для меня. Мне нужна обработка данных, полученных от экспериментов.
Я попробую ваши коды чтобы нормировать свои данные. Может быть возникать несколько проблем ещё, надеюсь, что вы продолжите помочь мне. Спасибо вам.
0
3678 / 2589 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
12.12.2020, 20:25 6
Volga_, вероятно, вам нужен BatchNormalization.
Python
1
2
3
4
5
6
7
from keras.layers import Dense, BatchNormalization;
...
model = Sequential()
model.add(BatchNormalization())
model.add(Dense(6, input_dim=2, activation='softsign'))
model.add(BatchNormalization())
model.add(Dense(1, LeakyReLU(alpha=0.1)))
Я с Keras API на вы, возможно вам надо будет поиграться с параметрами.

Добавлено через 2 минуты
Volga_, guess default parameters work, but u, for sure, can play with them.
1
672 / 546 / 74
Регистрация: 20.09.2014
Сообщений: 3,550
12.12.2020, 20:27 7
Цитата Сообщение от Volga_ Посмотреть сообщение
Привет, я иностранец.
Нее, я вас прекрасно понимаю, даже не заподозрил на иностранца. Проблема в технической части. Удачи!
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
12.12.2020, 20:34  [ТС] 8
Цитата Сообщение от IamRain Посмотреть сообщение
Я с Keras API на вы, возможно вам надо будет поиграться с параметрами.
Я поиграл их по вашим мнениям, кажется, они больше хорошо, как:
Python
1
2
3
4
5
6
7
8
9
10
11
Accuracy: 0.00
[1402.37, 5.7497] => 1.1230 (expected 1.6435)
[1402.46, 6.4661] => 1.1056 (expected 0.9520)
[1402.55, 7.3768] => 1.1118 (expected 0.9508)
[1402.66, 8.2583] => 1.1365 (expected 1.3669)
[1402.78, 9.1954] => 1.0915 (expected 0.9791)
[1402.91, 10.1366] => 1.0661 (expected 0.9775)
[1402.39, 5.8727] => 1.1186 (expected 0.9725)
[1402.48, 6.7135] => 1.1042 (expected 1.1448)
[1402.58, 7.6265] => 1.1185 (expected 1.4263)
[1402.69, 8.4922] => 1.1349 (expected 0.9590)
Но, не знаю почему точность (accuracy) равна нулю? Функции активации не хорошие?
0
672 / 546 / 74
Регистрация: 20.09.2014
Сообщений: 3,550
12.12.2020, 21:06 9
Точность (accuracy) измеряют не на тех данных, на которых обучались, а на тестовых.

Python
1
ll, accuracy = model.evaluate(X, predictions)
0
3678 / 2589 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
12.12.2020, 21:15 10
Mikhaylo, нет, это API так работает, ты ему даешь на вход X, и даешь правильные ответы, а он тебе сам посчитает точность.
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
12.12.2020, 21:15  [ТС] 11
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Точность (accuracy) измеряют не на тех данных, на которых обучались, а на тестовых.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# first neural network with keras make predictions
from numpy import loadtxt
from keras.models import Sequential
from keras.layers import Dense, BatchNormalization
from keras.layers import LeakyReLU
 
# load the dataset
dataset = loadtxt('KQ.txt', delimiter=',')
 
# split into input (X) and output (y) variables
X = dataset[:,0:2]
y = dataset[:,2]
 
# define the keras model
model = Sequential()
model.add(BatchNormalization())
model.add(Dense(6, input_dim=2, activation='softsign'))
model.add(BatchNormalization())
model.add(Dense(1, LeakyReLU(alpha=0.1)))
 
# compile the keras model
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
 
# fit the keras model on the dataset
model.fit(X, y, epochs=150, batch_size=10, verbose=0)
 
# make class predictions with the model
predictions = model.predict(X)
 
# evaluate the keras model
ll, accuracy = model.evaluate(X, predictions)
print('Loss: %.2f' % ll)
print('Accuracy: %.2f' % (accuracy*100))
 
# summarize the first 5 cases
for i in range(10):
    print('%s => %0.4f (expected %0.4f)' % (X[i].tolist(), predictions[i], y[i]))
Так, это ещё равно 0. Не понял !
0
3678 / 2589 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
12.12.2020, 21:19 12
Если verbose проставить в 1, то видно, что в каждом batch-е у него accuracy в 0.
Это значит, что модель никуда не годится, если даже на тех данных, на которых она тренировалась, она выдает нулевую точность.
Вероятно проблема в том, что модель буквально сравнивает floating-point данные, и один в один они никогда не совпадают.
Хотя близки. Отсюда и нулевая точность. Но видно что cost function по эпохам уменьшается.
Как сделать правильно - сходу не скажу. Скорее всего, что проблема именно в сравнении чисел с плавающей запятой.
0
672 / 546 / 74
Регистрация: 20.09.2014
Сообщений: 3,550
12.12.2020, 21:22 13
Тогда делить выборку (X, y) на обучающую и тестовую. И все-таки хватит переобучать модель: число эпох 10 хватит, батч размером 64.
0
3678 / 2589 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
12.12.2020, 21:42 14
Volga_, 10000 epochs of your code:
Код
Accuracy: 0.00
[1402.37, 5.7497] => 1.0952 (expected 1.6435)
[1402.46, 6.4661] => 1.0772 (expected 0.9520)
[1402.55, 7.3768] => 1.0689 (expected 0.9508)
[1402.66, 8.2583] => 1.0696 (expected 1.3669)
[1402.78, 9.1954] => 1.0770 (expected 0.9791)
[1402.91, 10.1366] => 1.0887 (expected 0.9775)
[1402.39, 5.8727] => 1.0912 (expected 0.9725)
[1402.48, 6.7135] => 1.0738 (expected 1.1448)
[1402.58, 7.6265] => 1.0684 (expected 1.4263)
[1402.69, 8.4922] => 1.0709 (expected 0.9590)
I am not sure what is wrong exactly, probably model is not expressive enough.
Пробуй, другие архитектуры, можно попробовать добавить еще один слой.
Обычно можно не особо задумываясь увеличивать число нейронов на первом скрытом слое, и сеть сама разберется.
Я бы попробовал добавить еще один слой, так как видно на выходе даже при 10000 эпохах выдается всегда ~1.
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
12.12.2020, 21:48  [ТС] 15
Цитата Сообщение от IamRain Посмотреть сообщение
Как сделать правильно - сходу не скажу. Скорее всего, что проблема именно в сравнении чисел с плавающей запятой.
Я даже использовал этот код:
Python
1
print('Accuracy: %.20f' % (accuracy*1000000))
но получил:
Код
Accuracy: 0.00000000000000000000
Я думаю, что проблема не в сравнении чисел с плавающей запятой. Может быть с функциями активации, но я изменял много типов функций активации, так не получилось хороший результат.
0
3678 / 2589 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
12.12.2020, 22:00 16
I am gonna play with your model but later. Will try to get right answer.
Is FPU comparison a problem or not? Try to use other metric while training. Probably accuracy in this case is not right metric.
Good luck!

Добавлено через 3 минуты
Цитата Сообщение от Volga_ Посмотреть сообщение
не в сравнении чисел с плавающей запятой
Я бы попробовал:
1. Добавить еще один слой. Модель недостаточно выразительна:
Код
[1402.58, 7.6265] => 1.0684 (expected 1.4263)
Model never outputs any value greater 1.1.
Даже на 10000 тысяч эпох сеть не выдает ни разу значение больше 1.1
2. Изменить метрику.
3. Возможно недостаточно данных.

Добавлено через 6 минут
If to play seriously, you should consider whether your y data distribution can be modelled by current network configuration or not.
But i am not good at these rocket science statistics things.
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
12.12.2020, 22:15  [ТС] 17
Спасибо. Я попробую с другими вариантами. Они очень сложно !
0
1581 / 1504 / 251
Регистрация: 19.02.2010
Сообщений: 4,061
12.12.2020, 22:28 18
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Нормализация - это приведение входных данных к диапазону [0.0, 1.0].
Люто, неистово аплодирую такой точке зрения
Народу ведь совершенно не надо знать то, что ЛеКун доказал ещё в 1991ом.
Пусть сами себе создают трудности (в виде кривых нормализаций, кривых нелинейностей) и потом их героически преодолевают всякими батч-нормами и Адамами
1
Модератор
Эксперт CЭксперт С++
5198 / 2915 / 1509
Регистрация: 14.12.2018
Сообщений: 5,258
Записей в блоге: 1
13.12.2020, 12:18  [ТС] 19
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Люто, неистово аплодирую такой точке зрения
Привет, можно дать несколько зрений для следующих проблем у меня выше ??? Спасибо !
0
672 / 546 / 74
Регистрация: 20.09.2014
Сообщений: 3,550
13.12.2020, 13:59 20
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Люто, неистово аплодирую такой точке зрения
Вы опять про тангенсоиды свои и [-1.0, +1.0]?
Тут такой задачи не стоит.)

По нормализации датасетов можно почитать достаточно исчерпывающую недавнюю статью на Хабре.
https://habr.com/ru/post/527334/

Добавлено через 3 минуты
Volga_, вы там определитесь у вас задача регрессии или задача классификации, а потом уже метрику выбирайте.
https://ru.gadget-info.com/dif... sification
0
13.12.2020, 13:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2020, 13:59
Помогаю со студенческими работами здесь

Распознавание образов с использованием логической нейронной сети
Помогите реализовать программу в Mathlab, необходимо распознать буквы русского или латинского...

Распознавание цифры по картинке с использованием нейронной сети
Помогите, пожалуйста, найти ошибку в программе. Её цель состоит в распознавании рукописных цифр с...

Решение задачи регрессии с использованием рекуррентной нейронной сети
Здравствуйте, ребята! Скажите, существуют ли модели рекуррентных нейронных сетей для решения...

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

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

Как преобразовать картинку чтобы получить адекватный вектор входных данных для нейронной сети?
Иначе, Как преобразовать картинку к виду массива? Может кто сталкивался?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru