Нейронная сеть сходится к нулевому выходуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Нейронная сеть сходится к нулевому выходу

Сообщение Anonymous »

Я пытаюсь обучить эту нейронную сеть делать прогнозы на основе некоторых данных.
Я попробовал ее на небольшом наборе данных (около 100 записей), и она работала как часы. Затем я подключил новый набор данных и обнаружил, что NN сходится к 0 на выходе, а ошибка сходится примерно к соотношению количества положительных примеров к общему количеству примеров.

Мой набор данных состоит из признаков типа «да/нет» (1.0/0.0), и основная истина также равна «да/нет».

Мои предположения:
1) на выходе имеется локальный минимум 0 (но я пробовал со многими значениями скорости обучения и начальных весов, кажется, они всегда сходятся)

2) мое обновление веса неверно (но мне кажется, что это хорошо)
3) это просто проблема масштабирования вывода. Я пытался масштабировать выходные данные (т. е. выход/макс(выход) и выход/среднее(выход)), но результаты не очень хорошие, как вы можете видеть в коде, приведенном ниже. Должен ли я масштабировать его по-другому? Софтмакс?

вот код:

import pandas as pd
import numpy as np
import pickle
import random
from collections import defaultdict

alpha = 0.1
N_LAYERS = 10
N_ITER = 10
#N_FEATURES = 8
INIT_SCALE = 1.0

train = pd.read_csv("./data/prediction.csv")

y = train['y_true'].as_matrix()
y = np.vstack(y).astype(float)
ytest = y[18000:]
y = y[:18000]

X = train.drop(['y_true'], axis = 1).as_matrix()
Xtest = X[18000:].astype(float)
X = X[:18000]

def tanh(x,deriv=False):
if(deriv==True):
return (1 - np.tanh(x)**2) * alpha
else:
return np.tanh(x)

def sigmoid(x,deriv=False):
if(deriv==True):
return x*(1-x)
else:
return 1/(1+np.exp(-x))

def relu(x,deriv=False):
if(deriv==True):
return 0.01 + 0.99*(x>0)
else:
return 0.01*x + 0.99*x*(x>0)

np.random.seed()

syn = defaultdict(np.array)

for i in range(N_LAYERS-1):
syn = INIT_SCALE * np.random.random((len(X[0]),len(X[0]))) - INIT_SCALE/2
syn[N_LAYERS-1] = INIT_SCALE * np.random.random((len(X[0]),1)) - INIT_SCALE/2

l = defaultdict(np.array)
delta = defaultdict(np.array)

for j in xrange(N_ITER):
l[0] = X
for i in range(1,N_LAYERS+1):
l = relu(np.dot(l[i-1],syn[i-1]))

error = (y - l[N_LAYERS])

e = np.mean(np.abs(error))
if (j% 1) == 0:
print "\nIteration " + str(j) + " of " + str(N_ITER)
print "Error: " + str(e)

delta[N_LAYERS] = error*relu(l[N_LAYERS],deriv=True) * alpha
for i in range(N_LAYERS-1,0,-1):
error = delta[i+1].dot(syn.T)
delta = error*relu(l,deriv=True) * alpha

for i in range(N_LAYERS):
syn += l.T.dot(delta[i+1])

pickle.dump(syn, open('neural_weights.pkl', 'wb'))

# TESTING with f1-measure
# RECALL = TRUE POSITIVES / ( TRUE POSITIVES + FALSE NEGATIVES)
# PRECISION = TRUE POSITIVES / (TRUE POSITIVES + FALSE POSITIVES)

l[0] = Xtest
for i in range(1,N_LAYERS+1):
l = relu(np.dot(l[i-1],syn[i-1]))

out = l[N_LAYERS]/max(l[N_LAYERS])

tp = float(0)
fp = float(0)
fn = float(0)
tn = float(0)

for i in l[N_LAYERS][:50]:
print i

for i in range(len(ytest)):
if out > 0.5 and ytest == 1:
tp += 1
if out[i] 0.5 and ytest[i] == 0:
fp += 1
if out[i]

Подробнее здесь: https://stackoverflow.com/questions/442 ... ero-output
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Классификационная нейронная сеть не сходится
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть C# MNIST увеличивает точность примерно до 20 %, а затем снова падает до 10 %.
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть в R (ответ не генерируется)
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть и генетический алгоритм Connect4
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть для прогнозирования шахматных ходов не может получить соответствующий результат
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»