2016-10-30 5 views
1

Ich versuche derzeit Tensorflow für eine Regression Aufgabe, die ich versuche zu lösen.Analysieren großen Dataset für Regression mit Tensorflow

Ich bin mir nicht sicher, wie ich meine Eingabedaten einspeisen sollte, wie sie in einer bestimmten Weise gespeichert.

Meine Eingabe ist eine Beispiel-Audiodatei für 0,5 s eingerahmt. Jede Audiodatei wird an eine Liste angehängt und jeder Rahmen wird als numpy.array gespeichert.

So etwas wie diese

#One audio set 
[array([[frame],[frame],...,[frame]],dtype=float32)] 

und der Ausgang ist

in einer solchen Art und Weise gespeichert
[array([[ 4.53255900e+01, -9.82247700e+00, -1.22920200e+00, 
     -6.81728800e+00, -8.23808400e+00, -1.42367900e+01, 
     -4.64904100e+00, -1.49673100e+01, -4.75058700e+00, 
     -7.54071600e+00, 5.11365500e+00, 9.80618400e+00, 
     -6.03554700e-01],....,[...]])] 

Ich habe versucht, etwas zu implementieren, die ich dachte funktionieren würde .. aber diese Fehlermeldung erhalten: -Code :

os.chdir(dnn_train) 

train_name,train_data = generate_list_of_names_data(files_train_path) 
train_data, train_output_data = load_sound_files(files_train_path,train_data) 


number_of_examples = len(train_data)/2 
train_set_data = train_data[:number_of_examples] 
train_set_output = train_output_data[:number_of_examples] 

test_set_data = train_data[number_of_examples:] 
test_set_output = train_output_data[number_of_examples:] 
############################# Training setup ################################## 
# Parameters 
learning_rate = 0.01 
training_epochs = 1000 
display_step = 50 

# tf Graph Input 
X = tf.placeholder("float") 
Y = tf.placeholder("float") 
n_samples = train_set_data[0].shape[0] 

# Set model weights 
W = tf.Variable(rng.randn(), name="weight") 
b = tf.Variable(rng.randn(), name="bias") 


# Construct a linear model 
pred = tf.add(tf.mul(X, W), b) 


# Mean squared error 
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples) 
# Gradient descent 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 


# Initializing the variables 
init = tf.initialize_all_variables() 

# Launch the graph 
with tf.Session() as sess: 
    sess.run(init) 

    # Fit all training data 
    for epoch in range(training_epochs): 
     for (x, y) in zip(train_set_data, train_set_output): 
      sess.run(optimizer, feed_dict={X: x, Y: y}) 

     #Display logs per epoch step 
     if (epoch+1) % display_step == 0: 
      c = sess.run(cost, feed_dict={X: train_set_data, Y:train_set_output}) 
      print "Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c), \ 
       "W=", sess.run(W), "b=", sess.run(b) 

    print "Optimization Finished!" 
    training_cost = sess.run(cost, feed_dict={X: train_set_data, Y: train_set_output}) 
    print "Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n' 

    #Graphic display 
    plt.plot(train_set_data, train_set_output, 'ro', label='Original data') 
    plt.plot(train_set_data, sess.run(W) * train_set_data + sess.run(b), label='Fitted line') 
    plt.legend() 
    plt.show() 

Fehler:

File "tensorflow_datapreprocess_mfcc_extraction_rnn.py", line 191, in <module> 
    sess.run(optimizer, feed_dict={X: x, Y: y}) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 340, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 564, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 637, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 659, in _do_call 
    e.code) 
tensorflow.python.framework.errors.InvalidArgumentError: Incompatible shapes: [2048,121] vs. [288,13] 
    [[Node: gradients/sub_grad/BroadcastGradientArgs = BroadcastGradientArgs[_device="/job:localhost/replica:0/task:0/cpu:0"](gradients/sub_grad/Shape, gradients/sub_grad/Shape_1)]] 
Caused by op u'gradients/sub_grad/BroadcastGradientArgs', defined at: 
    File "tensorflow_datapreprocess_mfcc_extraction_rnn.py", line 178, in <module> 
    optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 190, in minimize 
    colocate_gradients_with_ops=colocate_gradients_with_ops) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 241, in compute_gradients 
    colocate_gradients_with_ops=colocate_gradients_with_ops) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gradients.py", line 481, in gradients 
    in_grads = _AsList(grad_fn(op, *out_grads)) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_grad.py", line 386, in _SubGrad 
    rx, ry = gen_array_ops._broadcast_gradient_args(sx, sy) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 140, in _broadcast_gradient_args 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2154, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1154, in __init__ 
    self._traceback = _extract_stack() 

...which was originally created as op u'sub', defined at: 
    File "tensorflow_datapreprocess_mfcc_extraction_rnn.py", line 176, in <module> 
    cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 518, in binary_op_wrapper 
    return func(x, y, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 1683, in sub 
    return _op_def_lib.apply_op("Sub", x=x, y=y, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2154, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1154, in __init__ 
    self._traceback = _extract_stack() 

Wie füttere ich diese in Tensorflow?

Antwort

0

tf.mul (X, W) ist nur Skalarmultiplikation (und W ist ein Skalar in Ihrem Code), also ist die resultierende Form die gleiche wie X-Form, die aussieht, wo der Fehler herkommt (der einzige So könnte die Subtraktion in der Verlustfunktion funktionieren, wenn X und Y die gleiche Form hätten).

Haben X und Y in den Beispielen eine konsistente Form? Wenn dies der Fall ist, möchten Sie möglicherweise beide in Zeilenvektoren mit tf.reshape (X, [1, -1]) und tf.reshape (Y, [1, -1]) glätten. Ich werde die Länge dieser Vektoren X_LENGTH und Y_LENGTH nennen. Dann würde ich W eine Matrix mit tf.get_variable machen (name = "W", shape = [X_LENGTH, Y_LENGTH]), dann tf.matmul (X, W) anstelle von tf.mul verwenden. Die Ausgabe von Matmul() hat die Form [1, Y_LENGTH], die die Formprobleme, die Sie in der Verlustfunktion haben, beheben soll.

Während Sie gerade dabei sind, möchten Sie vielleicht einen Vektor der Länge Y_LENGTH machen, um für jeden der Ausgänge Verzerrungen zu erhalten.

+0

X und Y haben nicht die gleiche Form ... X ist der Eingang in diesem Fall und y ist der Ausgang. Die Form der Eingabe und Ausgabe ist wie im obigen Beitrag beschrieben. Jede "frame" -Größe ist gleich, hat aber nicht dieselbe Länge wie das verschachtelte Array in den Ausgabedaten. X und Y ist konsistent in der Form über die Beispiele. Ich habe versucht, Ihr Beispiel zu reduzieren, aber es scheint nicht zu funktionieren für mich Ich bin mir nicht sicher warum? –

+0

Ich bin nicht ganz sicher, warum Sie es abflachen würden .. Da es bereits in einer matrixartigen Struktur gespeichert ist? Wäre es nicht einfacher, es einzulesen, anstatt es abzuflachen, und eine Matrix aus einer bestimmten Anzahl von extrahierten Daten zu erstellen ... –

+0

Tatsächlich hat jedes Bild in jedem Beispiel die gleiche Länge, aber die Anzahl der Bilder in jedem Das Beispiel kann aufgrund der Länge der Audiodatei variieren. –

Verwandte Themen