pmav99 Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 (επεξεργασμένο) Δεν μπορώ να τρέξω τον κώδικα τώρα, αλλά το σφάλμα που παίρνεις είναι λίγο προφανές. Η pd.read_csv() σου επιστρέφει ένα pd.DataFrame . Στη συνέχεια προσπαθείς να καλέσεις την μέθοδο x_train.next_batch() και φυσικά σου χτυπάει γιατί τα pandas DataFrames δεν έχουν τέτοιο attribute/property/method Αν και τεχνικά είναι εφικτό να δημιουργήσεις DataFrames που να έχουν custom μεθόδους, συνήθως, δεν είναι αυτό το οποίο θες να κάνεις, ιδίως μάλιστα αφού πρόκειται για μια απλή εφαρμογή και δεν γράφεις πχ μια δική σου βιβλιοθήκη που ορίζει δικά της Data types τα οποία βασίζονται πάνω στα pandas DataFrames. Αυτό που κατά πάσα πιθανότητα θέλεις στην περίπτωσση αυτή είναι να ξαναορίσεις την next_batch() ως function (αντί για μέθοδο που το έχεις τώρα) και να αλλάξεις τον τρόπο που την καλείς. Δηλαδή: def next_batch(df, batch_size, fake_data=False, shuffle=True): # ο κώδικας σου όπου θα χρησιμοποιείς df, αντί για self! # snip epoch_x = next_batch(x_train, batch_size) epoch_y = next_batch(y_train, batch_size) edit Minor nitpick: Κατά τη γνώμη μου όταν κάνεις develop κώδικα που χρησιμοποιεί random generators καλό είναι τουλάχιστον στην φάση του testing να έχεις repeatable αποτελέσματα. Δεν έχει σχέση με το πρόβλημα που αντιμετωπίζεις εδώ αλλά αντί για numpy.random.shuffle(my_iterable) είναι καλύτερο να χρησιμοποιείς κάτι τέτοιο: https://stackoverflow.com/a/5837352/592289 Επεξ/σία 1 Σεπτεμβρίου 2018 από pmav99 1
Sheogorath Δημοσ. 1 Σεπτεμβρίου 2018 Μέλος Δημοσ. 1 Σεπτεμβρίου 2018 (επεξεργασμένο) 16 λεπτά πριν, pmav99 είπε Δεν μπορώ να τρέξω τον κώδικα τώρα, αλλά το σφάλμα που παίρνεις είναι λίγο προφανές. Η pd.read_csv() σου επιστρέφει ένα pd.DataFrame . Στη συνέχεια προσπαθείς να καλέσεις την μέθοδο x_train.next_batch() και φυσικά σου χτυπάει γιατί τα pandas DataFrames δεν έχουν τέτοιο attribute/property/method Αν και τεχνικά είναι εφικτό να δημιουργήσεις DataFrames που να έχουν custom μεθόδους, συνήθως, δεν είναι αυτό το οποίο θες να κάνεις, ιδίως μάλιστα αφού πρόκειται για μια απλή εφαρμογή και δεν γράφεις πχ μια δική σου βιβλιοθήκη που ορίζει δικά της Data types τα οποία βασίζονται πάνω στα pandas DataFrames. Αυτό που κατά πάσα πιθανότητα θέλεις στην περίπτωσση αυτή είναι να ξαναορίσεις την next_batch() ως function (αντί για μέθοδο που το έχεις τώρα) και να αλλάξεις τον τρόπο που την καλείς. Δηλαδή: def next_batch(df, batch_size, fake_data=False, shuffle=True): # ο κώδικας σου όπου θα χρησιμοποιείς df, αντί για self! # snip epoch_x = next_batch(x_train, batch_size) epoch_y = next_batch(y_train, batch_size) Προσπάθησα να την τρέξω σαν epoch_x = next_batch(x_train, batch_size) σαν συνάρτηση δηλαδή (αν το λέω σωστά), αλλά δεν. Θα το κοιτάξω. Στον κώδικα μέσα αντικαθιστώντας την δήλωση (πρώτη γραμμή) και μεσα όπου self, σε df, αν καταλαβα καλά; Σε ευχαριστω, δοκιμάζω σύντομα, και ενημερώνω! Επεξ/σία 1 Σεπτεμβρίου 2018 από Sheogorath
pmav99 Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 (επεξεργασμένο) Για την ακρίβεια και self να το αφήσεις δεν θα αλλάξει κάτι. Το self, ως το πρώτο και υποχρεωτικό argument μιας μεθόδου, αν και δεν είναι keyword με ειδική σημασία είναι ένα τόσο strong convention που θα σου πρότεινα εντόνως να μην το σπάσεις. Διάβασε εδώ για περισσότερες πληροφορίες: https://www.google.com/search?hl=en&q=python self explained PS. Δεν ξέρω αν θα τρέξει ο κώδικας σου με αυτό που σου πρότεινα, αλλά λογικά θα λυθεί το σφάλμα που παίρνεις. Φυσικά μπορεί να υπάρχουν και άλλα προβλήματα. PS2. Να βάζεις ολόκληρα τα tracebacks. Έριξα ένα μάτι στην next_batch(). Έχεις σίγουρα και άλλα θέματα. Επεξ/σία 1 Σεπτεμβρίου 2018 από pmav99 1
Sheogorath Δημοσ. 1 Σεπτεμβρίου 2018 Μέλος Δημοσ. 1 Σεπτεμβρίου 2018 7 λεπτά πριν, pmav99 είπε Για την ακρίβεια και self να το αφήσεις δεν θα αλλάξει κάτι. Το self, ως το πρώτο και υποχρεωτικό argument μιας μεθόδου, αν και δεν είναι keyword με ειδική σημασία είναι ένα τόσο strong convention που θα σου πρότεινα εντόνως να μην το σπάσεις. Διάβασε εδώ για περισσότερες πληροφορίες: https://www.google.com/search?hl=en&q=python self explained PS. Δεν ξέρω αν θα τρέξει ο κώδικας σου με αυτό που σου πρότεινα, αλλά λογικά θα λυθεί το σφάλμα που παίρνεις. Φυσικά μπορεί να υπάρχουν και άλλα προβλήματα. PS2. Να βάζεις ολόκληρα τα tracebacks. Πέρα απο την αλλαγή του self σε df, το άλλο το είχα κάνει (αν κατάλαβα καλά δηλαδή τι πρότεινες), αλλά βλακωδώς δεν το έγραψα εδώ (σαν update). Τώρα το πρόβλημα είναι το κάτωθι: Traceback (most recent call last): File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 119, in <module> train_neural_network(x) File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 100, in train_neural_network epoch_x = next_batch(x_train, batch_size) File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 36, in next_batch start = df._index_in_epoch File "D:\Programs\Python\lib\site-packages\pandas\core\generic.py", line 3614, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute '_index_in_epoch' Με κώδικα: import tensorflow as tf #from tensorflow.python.ops import rnn, rnn_cell from tensorflow.contrib import rnn import pandas as pd import numpy as numpy from six.moves import xrange #read the dataset x_train = pd.read_csv('x_train.csv') x_test = pd.read_csv('x_test.csv') y_train = pd.read_csv('y_train.csv') y_test = pd.read_csv('y_test.csv') hm_epochs = 10 n_classes = 2 batch_size = 144 chunk_size = 12 n_chunks = 12 rnn_size = 144 n_dim = x_train.shape[1] x = tf.placeholder('float', [None, n_dim]) y = tf.placeholder('float') def next_batch(df, batch_size, fake_data=False, shuffle=True): """Return the next `batch_size` examples from this data set.""" if fake_data: fake_image = [1] * 784 if df.one_hot: fake_label = [1] + [0] * 9 else: fake_label = 0 return [fake_image for _ in xrange(batch_size)], [ fake_label for _ in xrange(batch_size) ] start = df._index_in_epoch # Shuffle for the first epoch if df._epochs_completed == 0 and start == 0 and shuffle: perm0 = numpy.arange(df._num_examples) numpy.random.shuffle(perm0) df._images = df.images[perm0] df._labels = df.labels[perm0] # Go to the next epoch if start + batch_size > df._num_examples: # Finished epoch df._epochs_completed += 1 # Get the rest examples in this epoch rest_num_examples = df._num_examples - start images_rest_part = df._images[start:df._num_examples] labels_rest_part = df._labels[start:df._num_examples] # Shuffle the data if shuffle: perm = numpy.arange(df._num_examples) numpy.random.shuffle(perm) df._images = df.images[perm] df._labels = df.labels[perm] # Start next epoch start = 0 df._index_in_epoch = batch_size - rest_num_examples end = df._index_in_epoch images_new_part = df._images[start:end] labels_new_part = df._labels[start:end] return numpy.concatenate( (images_rest_part, images_new_part), axis=0), numpy.concatenate( (labels_rest_part, labels_new_part), axis=0) else: df._index_in_epoch += batch_size end = df._index_in_epoch return df._images[start:end], df._labels[start:end] def recurrent_neural_network_model(x): layer = {'weights': tf.Variable(tf.random_normal([rnn_size, n_classes])), 'biases': tf.Variable(tf.random_normal([n_classes]))} #x = tf.transpose(x, [1, 0, 2]) #x = tf.reshape(x, [-1, chunk_size]) x = tf.split(x, int(n_chunks)) lstm_cell = rnn.BasicLSTMCell(rnn_size) outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32) output = tf.matmul(outputs[-1], layer['weights']) + layer['biases'] return output def train_neural_network(x): prediction = recurrent_neural_network_model(x) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) optimizer = tf.train.AdamOptimizer().minimize(cost) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(hm_epochs): epoch_loss = 0 for _ in range(int(600000 / batch_size)): #epoch_x = x_train.next_batch(batch_size) #epoch_y = y_train.next_batch(batch_size) epoch_x = next_batch(x_train, batch_size) epoch_y = next_batch(y_train, batch_size) #epoch_x = epoch_x.reshape((batch_size, n_chunks, chunk_size)) # reshape 748 pixels to 28X28 image #epoch_x = epoch_x.reshape((batch_size, -1)) # The first index changing slowest, subseries as rows #epoch_y = epoch_y.reshape((batch_size, -1)) _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y}) epoch_loss += c #_, c = sess.run([optimizer, cost], feed_dict={x: x_train, y: y_train}) #epoch_loss += c print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss) correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct, 'float')) print('Accuracy:', accuracy.eval({x: x_test, y: y_test})) train_neural_network(x) Αν δεν είναι κόπος, όταν έχεις χρόνο σαφώς, αν μπορείς δες το. ΥΓ Τον οδηγό για LateX απλώς τον λίνκαρες ή τον έγραψες κιόλας; Αν το 2ο, θα σε ευχαριστήσω στην ορκωμοσία μου
k33theod Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 Σαν python μόνο και είμαι άσχετος με το θέμα tensorflow.😁 Η συνάρτηση που έκανες εσύ έχει μία παράμετρο την self. Αυτή την χρησιμοποιούμαι όταν κάνουμε object methods μέσα σε μία κλάση κάτι που δεν συμβαίνει σε αυτή την περίπτωση. Αν θες να περιγράψεις με αυτή κάποιο αντικείμενο που έχει τις ιδιότητες και μεθόδους που χρησιμοποιείς παρακάτω self.kati, μετονόμασε το καλύτερα σε object, και χρησιμοποίησε το object.kati. Το τι είναι αυτό το object ή το self και εάν έχει τις ιδιότητες που χρησιμοποιείς το ξέρεις εσύ. Όταν τώρα την καλείς την γράφεις ως έχει και όχι με . δηλαδή a=next_batch(my_object, 100, fake_data=True, shuffle=False) Για το 1ο σφάλμα που έπερνες για την ακολουθία δεν έχω ιδέα άλλαξε λίγο το μέγεθος του rnn_size από 144 που έχεις σε 128
pmav99 Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 (επεξεργασμένο) Επειδή έχω ασχοληθεί μόνο επιφανειακά με tensor flow (ενα δυο examples μόνο), θες να μου πεις τι ακριβώς θέλει να κάνει η next_batch? Γιατί νομίζω ότι το παρακάνεις περίπλοκο. Δεν εννοώ να μου πεις ότι θα πρέπει να διαλέξει το επόμενο batch. Εννοώ να γράψεις και με ποιους κανόνες το διαλέγει. Τα λάθη που παίρνεις είναι γιατί τα attributes που έχεις λογικά δεν έχουν οριστεί πουθενά. Προσπάθησε να τα μετατρέψεις σε variables. Πχ num_examples = ... index_in_epoch = ... images = ... labels = ... Γενικά προσπάθησε να κάνεις τον κώδικα πιο imperative, άσε τα OOP για την ώρα. edit Ο οδηγός για το LaTeX είναι πρακτικά οι σημειώσεις μου από όταν έκανα το μεταπτυχιακό μου (εργασίες + διπλωματική). Λογικά θα είναι σε αρκετά σημεία outdated πλέον. Αν θες την γνώμη μου, LaTeX χωρίς σημειώσεις δεν γίνεται Edit 2 Επειδή είμαι με data από το κινητό, αν ανεβάσεις ένα dataset μεγέθους πχ 1MB θα τρέξω και τον κώδικα. Κάνε πχ ένα head -n 1000 στα *.csv και ξαναζίπαρε. Επεξ/σία 1 Σεπτεμβρίου 2018 από pmav99
Sheogorath Δημοσ. 1 Σεπτεμβρίου 2018 Μέλος Δημοσ. 1 Σεπτεμβρίου 2018 4 λεπτά πριν, k33theod είπε Σαν python μόνο και είμαι άσχετος με το θέμα tensorflow.😁 Η συνάρτηση που έκανες εσύ έχει μία παράμετρο την self. Αυτή την χρησιμοποιούμαι όταν κάνουμε object methods μέσα σε μία κλάση κάτι που δεν συμβαίνει σε αυτή την περίπτωση. Αν θες να περιγράψεις με αυτή κάποιο αντικείμενο που έχει τις ιδιότητες και μεθόδους που χρησιμοποιείς παρακάτω self.kati, μετονόμασε το καλύτερα σε object, και χρησιμοποίησε το object.kati. Το τι είναι αυτό το object ή το self και εάν έχει τις ιδιότητες που χρησιμοποιείς το ξέρεις εσύ. Όταν τώρα την καλείς την γράφεις ως έχει και όχι με . δηλαδή a=next_batch(my_object, 100, fake_data=True, shuffle=False) Για το 1ο σφάλμα που έπερνες για την ακολουθία δεν έχω ιδέα άλλαξε λίγο το μέγεθος του rnn_size από 144 που έχεις σε 128 Την συνάρτηση την πήρα απο το mnist μέσα, copy paste, για αυτό και δεν "κάθησε καλά". Το πρώτο πρόβλημα το έλυσα με την εντολή split, δεν πιστεύω να με ξαναπασχολήσει. 4 λεπτά πριν, pmav99 είπε Επειδή έχω ασχοληθεί μόνο επιφανειακά με tensor flow (ενα δυο examples μόνο), θες να μου πεις τι ακριβώς θέλει να κάνει η next_batch? Γιατί νομίζω ότι το παρακάνεις περίπλοκο. Τα λάθη που παίρνεις είναι γιατί τα attributes που έχεις λογικά δεν έχουν οριστεί πουθενά. Προσπάθησε να τα μετατρέψεις σε variables. Πχ num_examples = ... index_in_epoch = ... images = ... labels = ... Γενικά για την ώρα κάνε τον κώδικα imperative Και εγώ μέσω της εφαρμογής παλεύω να καταλάβω tensorflow γιατι δυστυχώς πιέζει ο χρόνος. Η next_batch αυτό που θέλω να κάνει είναι να επιστρέφει το επόμενο τμήμα/ακολουθία δεδομένων, και καλώντας την να τα δίνω στα epoch_x & epoch_y για να κάνω update το δίκτυο τμηματικά. Πρακτικά για να επιστρέφει ένα μικρό τμήμα των train data κάθε φορά/κλήση. Να βάλω ταμπέλα index_in_epoch, αλλά με τι τιμή; Μόνο το αρχικό 0(ή 1) να δηλώσω;
k33theod Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 Θα σου πρότεινα και εγώ να αφήσεις την next_batch εκτός. Αν την χρειάζεσαι οποσδήποτε βεβαιώσου ότι ο κώδικας της είναι σωστός και σου επιστρέφει τον σωστό τύπο που χρειάζεται στη συνέχεια η tensorflow.
pmav99 Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 Sorry, αλλά το google το ρώτησες; https://stackoverflow.com/a/25701576/592289
Sheogorath Δημοσ. 1 Σεπτεμβρίου 2018 Μέλος Δημοσ. 1 Σεπτεμβρίου 2018 (επεξεργασμένο) 8 λεπτά πριν, k33theod είπε Θα σου πρότεινα και εγώ να αφήσεις την next_batch εκτός. Αν την χρειάζεσαι οποσδήποτε βεβαιώσου ότι ο κώδικας της είναι σωστός και σου επιστρέφει τον σωστό τύπο που χρειάζεται στη συνέχεια η tensorflow. Δυστυχώς απο όσο γνωρίζω πρέπει να τα επεξεργάζομαι σε batches. Εκτός αν γίνει απλώς κώδικας σε Python για να παίρνω το επόμενο κομμάτι των δεδομένων κάθε φορά, χωρίς συνάρτηση (ή με άλλη απλούστερη συνάρτηση). Όπως και να έχει, το δοκίμασα και δίνοντας τα δεδομένα όλα μέσα, όπως φαίνεται εδώ: for epoch in range(hm_epochs): epoch_loss = 0 for _ in range(int(600000 / batch_size)): _, c = sess.run([optimizer, cost], feed_dict={x: x_train, y: y_train}) epoch_loss += c print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss) Αλλά έβγαλε πάαααρα πολλά. Traceback (most recent call last): File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 1361, in _do_call return fn(*args) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 1340, in _run_fn target_list, status, run_metadata) File "D:\Programs\Python\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 516, in __exit__ c_api.TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.InvalidArgumentError: Number of ways to split should evenly divide the split dimension, but got split_dim 0 (size = 599999) and num_split 12 [[Node: split = Split[T=DT_FLOAT, num_split=12, _device="/job:localhost/replica:0/task:0/device:CPU:0"](softmax_cross_entropy_with_logits_sg/concat_1/axis, _arg_Placeholder_0_0)]] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 122, in <module> train_neural_network(x) File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 109, in train_neural_network _, c = sess.run([optimizer, cost], feed_dict={x: x_train, y: y_train}) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 905, in run run_metadata_ptr) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 1137, in _run feed_dict_tensor, options, run_metadata) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 1355, in _do_run options, run_metadata) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 1374, in _do_call raise type(e)(node_def, op, message) tensorflow.python.framework.errors_impl.InvalidArgumentError: Number of ways to split should evenly divide the split dimension, but got split_dim 0 (size = 599999) and num_split 12 [[Node: split = Split[T=DT_FLOAT, num_split=12, _device="/job:localhost/replica:0/task:0/device:CPU:0"](softmax_cross_entropy_with_logits_sg/concat_1/axis, _arg_Placeholder_0_0)]] Caused by op 'split', defined at: File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 122, in <module> train_neural_network(x) File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 88, in train_neural_network prediction = recurrent_neural_network_model(x) File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN.py", line 77, in recurrent_neural_network_model x = tf.split(x, int(n_chunks)) File "D:\Programs\Python\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1366, in split axis=axis, num_split=num_or_size_splits, value=value, name=name) File "D:\Programs\Python\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 6837, in _split "Split", split_dim=axis, value=value, num_split=num_split, name=name) File "D:\Programs\Python\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper op_def=op_def) File "D:\Programs\Python\lib\site-packages\tensorflow\python\framework\ops.py", line 3271, in create_op op_def=op_def) File "D:\Programs\Python\lib\site-packages\tensorflow\python\framework\ops.py", line 1650, in __init__ self._traceback = self._graph._extract_stack() # pylint: disable=protected-access InvalidArgumentError (see above for traceback): Number of ways to split should evenly divide the split dimension, but got split_dim 0 (size = 599999) and num_split 12 [[Node: split = Split[T=DT_FLOAT, num_split=12, _device="/job:localhost/replica:0/task:0/device:CPU:0"](softmax_cross_entropy_with_logits_sg/concat_1/axis, _arg_Placeholder_0_0)]] 3 λεπτά πριν, pmav99 είπε Sorry, αλλά το google το ρώτησες; https://stackoverflow.com/a/25701576/592289 Το θέμα είναι ότι βλέπω πρώτη φορά όλους αυτούς τους όρους. Ότι είχα κάνει, το είχα κάνει σε Assembly, VHDL, System Verilog, C, λίγη C++ και Matlab. Είμαι hardwareας πνιγμένος σε μια θάλασσα software. Θα μπορούσες να δείξεις πως μπορεί να υλοποιηθεί στον κώδικα; Το κοιτάω και εγώ τώρα. Επεξ/σία 1 Σεπτεμβρίου 2018 από Sheogorath
k33theod Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 4 λεπτά πριν, Sheogorath είπε Την συνάρτηση την πήρα απο το mnist μέσα, copy paste, για αυτό και δεν "κάθησε καλά". Το πρώτο πρόβλημα το έλυσα με την εντολή split, δεν πιστεύω να με ξαναπασχολήσει. Omg Wtf Πήρες μιας μεθόδο με copy - Paste και την χρησιμοποιείς έτσι; Δεν είναι ακριβώς ο τρόπος που δουλεούν οι κλάσεις. 😂 κλαίω.
Sheogorath Δημοσ. 1 Σεπτεμβρίου 2018 Μέλος Δημοσ. 1 Σεπτεμβρίου 2018 1 λεπτό πριν, k33theod είπε Omg Wtf Πήρες μιας μεθόδο με copy - Paste και την χρησιμοποιείς έτσι; Δεν είναι ακριβώς ο τρόπος που δουλεούν οι κλάσεις. 😂 κλαίω. Σώπα. Για αυτό σας ζαλίζω. Θεώρησα θα δουλευε σαν συνάρτηση, που την καλείς με εισόδους και βγάζει κάποια έξοδο.
pmav99 Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 Για να το καταλάβεις δοκίμασε το έτσι: def chunker(seq, size): return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) chunk_size = 5 for (epoch_x, epoch_y) in zip(chunker(x_train, chunk_size), chunker(y_train, chunk_size)): print(epoch_x) print(epoch_y) print() O πλήρης κώδικας λογικά είναι αυτός: def chunker(seq, size): return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) def train_neural_network(x): prediction = recurrent_neural_network_model(x) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) optimizer = tf.train.AdamOptimizer().minimize(cost) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(hm_epochs): epoch_loss = 0 for (epoch_x, epoch_y) in zip(chunker(x_train, chunk_size), chunker(y_train, chunk_size)): # print(epoch_x) # print(epoch_y) _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y}) epoch_loss += c print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss,) correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct, 'float')) print ('Accuracy:', accuracy.eval({x: x_test, y: y_test})) 1
Sheogorath Δημοσ. 1 Σεπτεμβρίου 2018 Μέλος Δημοσ. 1 Σεπτεμβρίου 2018 4 λεπτά πριν, pmav99 είπε Για να το καταλάβεις δοκίμασε το έτσι: def chunker(seq, size): return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) chunk_size = 5 for (epoch_x, epoch_y) in zip(chunker(x_train, chunk_size), chunker(y_train, chunk_size)): print(epoch_x) print(epoch_y) print() Τα παίρνει και τα τυπώνει ανα 5. Ωραία. Το εφαρμόζω και ενημερώνω Μακάρι να ήταν τόσο απλό. 12 λεπτά πριν, pmav99 είπε Για να το καταλάβεις δοκίμασε το έτσι: def chunker(seq, size): return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) chunk_size = 5 for (epoch_x, epoch_y) in zip(chunker(x_train, chunk_size), chunker(y_train, chunk_size)): print(epoch_x) print(epoch_y) print() O πλήρης κώδικας λογικά είναι αυτός: def chunker(seq, size): return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) def train_neural_network(x): prediction = recurrent_neural_network_model(x) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) optimizer = tf.train.AdamOptimizer().minimize(cost) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(hm_epochs): epoch_loss = 0 for (epoch_x, epoch_y) in zip(chunker(x_train, chunk_size), chunker(y_train, chunk_size)): # print(epoch_x) # print(epoch_y) _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y}) epoch_loss += c print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss,) correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct, 'float')) print ('Accuracy:', accuracy.eval({x: x_test, y: y_test})) Λοιπον, απο ότι κατάλαβα, δούλεψε Αλλά βγάζει το παρακάτω: Traceback (most recent call last): File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN_chunker.py", line 122, in <module> train_neural_network(x) File "C:/Users/Sheo/PycharmProjects/CNN_ex/RNN_NAN_chunker.py", line 111, in train_neural_network _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y}) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 905, in run run_metadata_ptr) File "D:\Programs\Python\lib\site-packages\tensorflow\python\client\session.py", line 1106, in _run np_val = np.asarray(subfeed_val, dtype=subfeed_dtype) File "D:\Programs\Python\lib\site-packages\numpy\core\numeric.py", line 492, in asarray return array(a, dtype, copy=False, order=order) TypeError: float() argument must be a string or a number, not 'generator' Ο κώδικας πλέον είναι ο : import tensorflow as tf #from tensorflow.python.ops import rnn, rnn_cell from tensorflow.contrib import rnn import pandas as pd import numpy as numpy from six.moves import xrange #read the dataset x_train = pd.read_csv('x_train.csv') x_test = pd.read_csv('x_test.csv') y_train = pd.read_csv('y_train.csv') y_test = pd.read_csv('y_test.csv') hm_epochs = 10 n_classes = 2 batch_size = 144 chunk_size = 12 n_chunks = 12 rnn_size = 144 n_dim = x_train.shape[1] x = tf.placeholder('float', [None, n_dim]) y = tf.placeholder('float') def recurrent_neural_network_model(x): layer = {'weights': tf.Variable(tf.random_normal([rnn_size, n_classes])), 'biases': tf.Variable(tf.random_normal([n_classes]))} #x = tf.transpose(x, [1, 0, 2]) #x = tf.reshape(x, [-1, chunk_size]) x = tf.split(x, int(n_chunks)) lstm_cell = rnn.BasicLSTMCell(rnn_size) outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32) output = tf.matmul(outputs[-1], layer['weights']) + layer['biases'] return output def chunker(seq, size): return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) def train_neural_network(x): prediction = recurrent_neural_network_model(x) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) optimizer = tf.train.AdamOptimizer().minimize(cost) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(hm_epochs): epoch_loss = 0 for _ in range(int(600000 / batch_size)): epoch_x = chunker(x_train, batch_size) epoch_y = chunker(y_train, batch_size) _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y}) epoch_loss += c print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss) correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct, 'float')) print('Accuracy:', accuracy.eval({x: x_test, y: y_test})) train_neural_network(x) Θέλετε μήπως να βάζω σε spoiler των κώδικα μην κάνετε scroll; (όχι ότι είναι μεγάλος αλλά λέω)
k33theod Δημοσ. 1 Σεπτεμβρίου 2018 Δημοσ. 1 Σεπτεμβρίου 2018 6 λεπτά πριν, Sheogorath είπε Σώπα. Για αυτό σας ζαλίζω. Θεώρησα θα δουλευε σαν συνάρτηση, που την καλείς με εισόδους και βγάζει κάποια έξοδο. Όχι δουλεύει μόνο για τα αντικείμενα της κλάσης. Έστω ότι ανήκει στην κλάση read_data_sets που χρησιμποποιεί και ο φίλος που πήρες τον κορμό. κάνεις την κλάση import from tensorf low.examples.tutorials.mnist.input_data import read_data_sets παράγεις αντικείμενα αυτής της κλάσης καλόντας την κλάση με παραμέτρους αν χρειάζεται obj1= read_data_sets("/tmp/data/", one_hot =True) καλείς τις μεθόδους της κλάσης με obj1. result = obj1.next_batch(parametroi ektos to self) το result το χρησιμοποιείς αν θες να πάρεις την επιστρεφόμενη τιμή. Μόνο τα αντικείμενα της κλάσης μπορούν να χρησιμοποίσουν τις μεθόδους της, κανείς άλλος ΑΠΑΓΟΡΕΥΕΤΑΙ!!! 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα