iXdi - Σύγχρονος προγραμματισμός

Η απώλεια δεν είναι κάτω από ~60 και η ακρίβεια δοκιμής δεν ξεπερνά ποτέ το ~40% χρησιμοποιώντας tensorflow

Το πρόβλημα

Χρησιμοποιώ έναν DNNClassifier στο Tensorflow και δεν μπορώ ποτέ να πάρω την απώλειά μου κάτω από περίπου 60 και την ακρίβεια δοκιμής πάνω από περίπου 40%. Είχα ένα πρόβλημα πριν, όπου η ακρίβεια της δοκιμής μου ήταν σχεδόν νεκρή στο 25%, αλλά μετά την κανονικοποίηση όλων των εισόδων μου, μπόρεσα να αυξήσω λίγο την ακρίβεια της δοκιμής μου, αλλά όχι πολύ.

Τα δεδομένα

Το μόνο που χρειάζεται να ξέρετε για τα δεδομένα είναι ότι έχω περίπου 127.000 αρχεία δεδομένων για το ποσοστό εγκληματικότητας. 15 χαρακτηριστικά και μία ετικέτα. Ο σκοπός του δικτύου είναι να τα ταξινομήσει στο σωστό τεταρτημόριο πληθυσμού (το οποίο βασίζεται στον πληθυσμό κάθε νομού) Άρα η ετικέτα εξόδου είναι μόνο 4 τάξεις (0-3).

Ο κωδικός

import pandas as pd
import tensorflow as tf
import os

dir_path = os.path.dirname(os.path.realpath(__file__))
csv_path = dir_path + "/testing.csv"
CSV_COLUMN_NAMES = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', 'Quartile']


def load_data():

    all = pd.read_csv(csv_path, names=CSV_COLUMN_NAMES, header=0).sample(frac=1)

    x = all.drop(['Quartile'], axis=1)
    y = all[['Quartile']].copy()

    size = x.shape[0]
    cutoff = int(0.75*size)

    train_x = x.head(cutoff)
    train_y = y.head(cutoff)

    test_x = x.tail(size-cutoff)
    test_y = y.tail(size-cutoff)

    return (train_x, train_y), (test_x, test_y)


def train_input_fn(features, labels, batch_size):

    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))

    dataset = dataset.shuffle(1000).repeat().batch(batch_size)

    return dataset


def eval_input_fn(features, labels, batch_size):

    features=dict(features)

    if labels is None:
        inputs = features
    else:
        inputs = (features, labels)

    dataset = tf.data.Dataset.from_tensor_slices(inputs)

    assert batch_size is not None, "batch_size must not be None"
    dataset = dataset.batch(batch_size)

    return dataset


def main(argv):

    batch_size = 50

    (train_x, train_y), (test_x, test_y) = load_data()

    my_feature_columns = []
    for key in train_x.keys():
        my_feature_columns.append(tf.feature_column.numeric_column(key=key))

    classifier = tf.estimator.DNNClassifier(
        feature_columns=my_feature_columns,
        hidden_units=[10, 10],
        optimizer=tf.train.GradientDescentOptimizer(0.001),
        n_classes=4)

    # training
    classifier.train(
        input_fn=lambda:train_input_fn(train_x, train_y, batch_size), steps=5000)

    # testing
    eval_result = classifier.evaluate(
        input_fn=lambda:eval_input_fn(test_x, test_y, batch_size))

    print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))


if __name__ == '__main__':
    tf.logging.set_verbosity(tf.logging.INFO)
    tf.app.run(main)

Τι έχω δοκιμάσει

  • Μπλέκομαι με το ρυθμό εκμάθησής μου στο βελτιστοποιητή gradient descent
  • Αλλαγή της μείωσης της απώλειας σε MEAN αντί για SUM που έχει οριστεί από προεπιλογή
  • Αλλάζω το μέγεθος του βήματος μου (μέχρι 100000 ακόμη!)
  • Δοκιμάζοντας μόνο ένα κρυφό στρώμα (μέγεθος: 10) και δύο κρυφά επίπεδα (μέγεθος: 90 το καθένα)

Ήλπιζα ότι θα μπορούσατε να προτείνετε οποιουσδήποτε πιθανούς λόγους για τους οποίους το νευρωνικό δίκτυό μου φαίνεται να καθυστερεί. Ευχαριστώ!


Απαντήσεις:


1

Μπορείτε να ρίξετε μια ματιά στις ακόλουθες οδηγίες:

  • Μειώστε τον αριθμό των κρυφών μονάδων όσο πιο βαθιά βρίσκεστε στο δίκτυό σας (π.χ. 10 - 5 αλλά όχι 10 - 10).
  • Χρησιμοποιήστε το Adam αντί για το (Stochastic) Gradient Descent ή δοκιμάστε μια άλλη μέθοδο βελτιστοποίησης πρώτης τάξης.
  • Αυξήστε το μέγεθος της παρτίδας σε ισχύ 2 (64, 128, 256, ...).
03.05.2018
  • Δοκίμασα να αυξήσω το μέγεθος παρτίδας σε 64, χρησιμοποίησα 10 - 5 για κρυφά επίπεδα και δοκίμασα το βελτιστοποιητή adam και εξακολουθεί να έχει την ίδια ακρίβεια δοκιμής (~40%). Δεν έχω κυριολεκτικά ιδέα τι μπορεί να το προκαλεί αυτό. 03.05.2018
  • Νέα υλικά

    Το Python Selenium Web Scraping σας κατέβασε το 2023; Εκκαθαρίστε την προσωρινή μνήμη και ενισχύστε τα αποτελέσματά σας!
    Η απόξεση ιστού με το Python Selenium είναι ένα εξαιρετικό εργαλείο για την εξαγωγή δεδομένων από ιστοσελίδες. Ωστόσο, περιστασιακά, οι ιστοσελίδες ενδέχεται να αποτύχουν να φορτώσουν ή να..

    Έννοιες JavaScript που πρέπει να γνωρίζετε για να ξεκινήσετε με το React
    Αφού είδα αυτή την ερώτηση να τίθεται αμέτρητες φορές, πιστεύω ότι μπορεί να είναι χρήσιμο σε πολλούς ανθρώπους εκεί έξω να έχουν μια σαφή κατανόηση του τι χρειάζεται να είναι γνωστό στο..

    Χρήση της C++ ως γλώσσας δέσμης ενεργειών, μέρος 8
    Βελτίωση κλήσεων λειτουργιών API με χρήση ενσωματωμένης συναρμολόγησης Έχω πειραματιστεί με την ενσωματωμένη συναρμολόγηση στο παρελθόν με κάποια επιτυχία. Είναι περίπλοκο και εύκολο να κάνεις..

    5 αμυχές που πρέπει να γνωρίζετε για να γίνετε σπουδαίος προγραμματιστής.
    5 αμυχές που πρέπει να γνωρίζετε για να γίνετε σπουδαίος προγραμματιστής. Αυτές τις μέρες, πολλοί φιλοδοξούν να εργαστούν ως προγραμματιστές. Αλλά το να γίνεις σπουδαίος προγραμματιστής δεν..

    Πώς να εφαρμόσετε το Deep Learning σε δομημένα δεδομένα
    Η βαθιά μάθηση είναι ένα καυτό και περιζήτητο θέμα τώρα ως μέρες. Η επιτυχία του προέρχεται από το γεγονός ότι είναι εξαιρετικά αποτελεσματικό στην επίλυση σύνθετων προβλημάτων και στην επίτευξη..

    Είναι το AI καλύτερο από τα ζώα στο να βλέπουν στο σκοτάδι;
    Τέχνη Μηχανικής Εκμάθησης Είναι η τεχνητή νοημοσύνη καλύτερη από τα ζώα στο να βλέπουν στο σκοτάδι; Τα όρια της όρασης ρομπότ στο ακραίο σκοτάδι Μελέτη της συμπεριφοράς των ζώων τη..

    Νέα δυνατότητα: Αναπτύξτε περισσότερο τον ανοιχτό κώδικα με το IssueHunt Upvotes
    Είμαστε στην ευχάριστη θέση να σας παρουσιάσουμε τη νεότερη λειτουργία μας: IssueHunt Upvote , τον τέλειο τρόπο υποστήριξης, κοινής χρήσης και παρακολούθησης του αγαπημένου σας ανοιχτού..