2017-06-30 1 views
1

Après avoir résolu mon problème de forme d'entrée j'ai exécuté mon programme, le problème est que la perte totale imprimée par le programme est bien trop élevée (si je compare par exemple à celle du quickstart Didacticiel).Python TFlearn - Perte trop élevée

Mon objectif est de prédire l'encombrement de l'entrée future en utilisant des données passées (j'ai plus de 10M d'entrée avec le score marqué) donc je ne devrais pas avoir de problème avec la formation.

Voici mon code:

import numpy as np 
import tflearn 

# Load CSV file, indicate that the first column represents labels 
from tflearn.data_utils import load_csv 
data, labels = load_csv('nowcastScaled.csv', has_header=True, n_classes=2) 

# Preprocessing function 
def preprocess(data): 
    return np.array(data, dtype=np.float32) 

# Preprocess data 
data = preprocess(data) 

# Build neural network 
net = tflearn.input_data(shape=[None, 2]) 
net = tflearn.fully_connected(net, 32) 
net = tflearn.fully_connected(net, 32) 
net = tflearn.fully_connected(net, 2, activation='linear') 
data = np.reshape(data, (-1, 2)) 
labels = np.reshape(labels, (-1, 2)) 
net = tflearn.regression(net, optimizer='adam', learning_rate=0.001, 
         loss='categorical_crossentropy') 

# Define model 
model = tflearn.DNN(net) 
# Start training (apply gradient descent algorithm) 
model.fit(data, labels, n_epoch=15, batch_size=16, show_metric=True) 

# Training 
model.save('test_Model') 
model.load('test_Model') 
score = model.evaluate(data, labels, batch_size=16) 

fichier excel Mon avoir ce genre de regard (colonne 2, 100 000 lignes)

calculed_at , congestion 
1 , 56 
2 , 21 

C'est ce que les résultats ressemblent à (15 époque) :

Training samples: 50000 
Validation samples: 0 
.... 
-- 
Training Step: 40625 | total loss: 15.27961 | time: 17.659s 
| Adam | epoch: 013 | loss: 15.27961 - acc: 0.7070 -- iter: 50000/50000 
-- 
Training Step: 43750 | total loss: 15.66268 | time: 17.549s 
| Adam | epoch: 014 | loss: 15.66268 - acc: 0.7247 -- iter: 50000/50000 
-- 
Training Step: 46875 | total loss: 15.94696 | time: 18.037s 
| Adam | epoch: 015 | loss: 15.94696 - acc: 0.7581 -- iter: 50000/50000 
-- 

Avez-vous une idée de ce qui pourrait causer une telle perte? Cela semble étrange puisque la précision imprimée ne semble pas trop mauvaise. Merci de votre aide.

Éditer: Ça a semblé être un bon moment quand j'ai pris ces valeurs car quand j'ai essayé tout à l'heure j'avais une perte totale dépassant 280 (et une précision inférieure à 0,3 ou à peine supérieure).

+0

cela vous dérangerait de partager le fichier csv à déboguer? –

+0

Une chose qui me frappe immédiatement, c'est que c'est un réseau entièrement linéaire. Si vous regardez l'API de tflearn, votre activation est par défaut 'linear'. Changez-le en non-linéarité et voyez si cela fonctionne. En outre, puisqu'il s'agit d'une régression, pourquoi votre perte 'categorical_crossentropy'? Elaborer plus sur vos «données» et «labels» aiderait. – jkschin

+0

@jkschin Je ne suis pas trop habitué à tflearn, j'ai essayé "softmax" au lieu de linéaire mais ce n'était pas mieux. Pour catégorical_crossentropy je l'ai utilisé parce qu'il était sur le tutoriel quickstart et je ne sais pas sur quelle base je devrais choisir l'un ou l'autre. Que voulez-vous dire en élaborant davantage sur les données et les étiquettes? –

Répondre

1

Pour les séries temporelles, vous construisez les échantillons d'entrée/sortie en prenant en compte les trames de fenêtre temporelle. Dans chaque fenêtre, si les échantillons sont {0, 1, ...N}, sélectionnez les premiers échantillons N-1 en entrée et le dernier échantillon en sortie. Ensuite, vous pouvez faire une régression pour faire time prediction.