Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Δεν μπορώ να τρέξω τον κώδικα τώρα, αλλά το σφάλμα που παίρνεις είναι λίγο προφανές.

Η 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

Επεξ/σία από pmav99
  • Thanks 1
  • Απαντ. 45
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Δημοσ. (επεξεργασμένο)
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, αν καταλαβα καλά;

Σε ευχαριστω, δοκιμάζω σύντομα, και ενημερώνω!

Επεξ/σία από Sheogorath
Δημοσ. (επεξεργασμένο)

Για την ακρίβεια και self να το αφήσεις δεν θα αλλάξει κάτι.

Το self, ως το πρώτο και υποχρεωτικό argument μιας μεθόδου, αν και δεν είναι keyword με ειδική σημασία είναι ένα τόσο strong convention που θα σου πρότεινα εντόνως να μην το σπάσεις.

Διάβασε εδώ για περισσότερες πληροφορίες: https://www.google.com/search?hl=en&q=python self explained

PS. Δεν ξέρω αν θα τρέξει ο κώδικας σου με αυτό που σου πρότεινα, αλλά λογικά θα λυθεί το σφάλμα που παίρνεις. Φυσικά μπορεί να υπάρχουν και άλλα προβλήματα.
PS2. Να βάζεις ολόκληρα τα tracebacks.

Έριξα ένα μάτι στην next_batch(). Έχεις σίγουρα και άλλα θέματα.

Επεξ/σία από pmav99
  • Like 1
Δημοσ.
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ο, θα σε ευχαριστήσω στην ορκωμοσία μου :P

Δημοσ.

Σαν 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

Δημοσ. (επεξεργασμένο)

Επειδή έχω ασχοληθεί μόνο επιφανειακά με 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 και ξαναζίπαρε.

Επεξ/σία από pmav99
Δημοσ.
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) να δηλώσω;

Δημοσ.

Θα σου πρότεινα και εγώ να αφήσεις την next_batch εκτός. Αν την χρειάζεσαι οποσδήποτε βεβαιώσου ότι ο κώδικας της είναι σωστός και σου επιστρέφει τον σωστό τύπο που χρειάζεται στη συνέχεια η tensorflow.

Δημοσ. (επεξεργασμένο)
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 το ρώτησες; :P

https://stackoverflow.com/a/25701576/592289

Το θέμα είναι ότι βλέπω πρώτη φορά όλους αυτούς τους όρους. Ότι είχα κάνει, το είχα κάνει σε Assembly, VHDL, System Verilog, C, λίγη C++ και Matlab. Είμαι hardwareας πνιγμένος σε μια θάλασσα software. :(

Θα μπορούσες να δείξεις πως μπορεί να υλοποιηθεί στον κώδικα; Το κοιτάω και εγώ τώρα.

Επεξ/σία από Sheogorath
Δημοσ.
4 λεπτά πριν, Sheogorath είπε

Την συνάρτηση την πήρα απο το mnist μέσα, copy paste, για αυτό και δεν "κάθησε καλά". Το πρώτο πρόβλημα το έλυσα με την εντολή split, δεν πιστεύω να με ξαναπασχολήσει. 

 

Omg  Wtf Πήρες μιας μεθόδο με copy - Paste και την χρησιμοποιείς έτσι; Δεν είναι ακριβώς ο τρόπος που δουλεούν οι κλάσεις. 😂 κλαίω.

Δημοσ.
1 λεπτό πριν, k33theod είπε

Omg  Wtf Πήρες μιας μεθόδο με copy - Paste και την χρησιμοποιείς έτσι; Δεν είναι ακριβώς ο τρόπος που δουλεούν οι κλάσεις. 😂 κλαίω.

Σώπα. Για αυτό σας ζαλίζω. :P

Θεώρησα θα δουλευε σαν συνάρτηση, που την καλείς με εισόδους και βγάζει κάποια έξοδο.

Δημοσ.

Για να το καταλάβεις δοκίμασε το έτσι:

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}))

 

  • Thanks 1
Δημοσ.
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;  (όχι ότι είναι μεγάλος αλλά λέω)

Δημοσ.
6 λεπτά πριν, Sheogorath είπε

Σώπα. Για αυτό σας ζαλίζω. :P

Θεώρησα θα δουλευε σαν συνάρτηση, που την καλείς με εισόδους και βγάζει κάποια έξοδο.

Όχι δουλεύει μόνο για τα αντικείμενα της κλάσης. Έστω ότι ανήκει στην κλάση 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 το χρησιμοποιείς αν θες να πάρεις την επιστρεφόμενη τιμή.

Μόνο τα αντικείμενα της κλάσης μπορούν να χρησιμοποίσουν τις μεθόδους της, κανείς άλλος ΑΠΑΓΟΡΕΥΕΤΑΙ!!!

  • Thanks 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...