Tentando Kaggle Titanic com keras .. ficando perda e valid_loss -0,0000

votos
3

Oi eu estou recebendo resultados estranhos para o seguinte código para o problema postado aqui ( https://www.kaggle.com/c/titanic ) -

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.advanced_activations import PReLU, LeakyReLU
from keras.layers.recurrent import SimpleRNN, SimpleDeepRNN
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM, GRU

import pandas as pd
import numpy as np 
from sklearn import preprocessing

np.random.seed(1919)

### Constants ###
data_folder = /home/saj1919/Public/Data_Science_Mining_Study/submissions/titanic/data/
out_folder = /home/saj1919/Public/Data_Science_Mining_Study/submissions/titanic/output/
batch_size = 4
nb_epoch = 10

### load train and test ###
train  = pd.read_csv(data_folder+'train.csv', index_col=0)
test  = pd.read_csv(data_folder+'test.csv', index_col=0)
print Data Read complete

Y = train.Survived
train.drop('Survived', axis=1, inplace=True)

columns = train.columns
test_ind = test.index

train['Age'] = train['Age'].fillna(train['Age'].mean())
test['Age'] = test['Age'].fillna(test['Age'].mean())
train['Fare'] = train['Fare'].fillna(train['Fare'].mean())
test['Fare'] = test['Fare'].fillna(test['Fare'].mean())

category_index = [0,1,2,4,5,6,8,9]
for i in category_index:
    print str(i)+ : +columns[i]
    train[columns[i]] = train[columns[i]].fillna('missing')
    test[columns[i]] = test[columns[i]].fillna('missing')

train = np.array(train)
test = np.array(test)

### label encode the categorical variables ###
for i in category_index:
    print str(i)+ : +str(columns[i])
    lbl = preprocessing.LabelEncoder()
    lbl.fit(list(train[:,i]) + list(test[:,i]))
    train[:,i] = lbl.transform(train[:,i])
    test[:,i] = lbl.transform(test[:,i])

### making data as numpy float ###
train = train.astype(np.float32)
test = test.astype(np.float32)
#Y = np.array(Y).astype(np.int32)

model = Sequential()
model.add(Dense(len(columns), 512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(512, 1))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer=adam)
model.fit(train, Y, nb_epoch=nb_epoch, batch_size=batch_size, validation_split=0.20)
preds = model.predict(test,batch_size=batch_size)

pred_arr = []
for pred in preds:
    pred_arr.append(pred[0])

### Output Results ###
preds = pd.DataFrame({PassengerId: test_ind, Survived: pred_arr})
preds = preds.set_index('PassengerId')
preds.to_csv(out_folder+'test.csv')

Estou ficando seguintes resultados:

Train on 712 samples, validate on 179 samples
Epoch 0
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 1
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 2
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 3
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 4
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 5
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 6
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 7
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 8
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000
Epoch 9
712/712 [==============================] - 0s - loss: -0.0000 - val_loss: -0.0000

Eu estou tentando criar uma rede de 3 camada simples. código totalmente básico. Eu tentei este tipo de problemas de classificação antes de usar keras em Kaggle. Mas desta vez recebendo este erro.

É overfitting devido a menos dados. O que eu estou ausente? Alguém pode ajudar?

Publicado 25/07/2015 em 13:17
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

post antigo, mas responder de qualquer maneira no caso de alguém tentativas Titanic com Keras.

Sua rede pode ter muitos parâmetros e muito pouco regularização (eg abandono).

Chamada model.summary () logo antes do model.compile e ele vai mostrar quantos parâmetros de sua rede tem. Apenas entre as duas camadas densas você deve ter 512 x 512 = 262.144 paramters. Isso é um monte de 762 exemplos.

Além disso, você pode querer usar uma ativação sigmóide na última camada e perda de entropia binary_cross como você só tem duas classes de saída.

Respondeu 31/10/2016 em 23:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more