2016-10-30 14 views
1

現在、私が解決しようとしている回帰タスクのテンソルフローを設定しようとしています。テンソルを使った回帰のための大きなデータセットの解析

特定の方法で格納されているので、入力データをどのように入力するべきかわかりません。

私の入力は、0.5秒間にフレーム化されたサンプルオーディオファイルです。各オーディオファイルはリストに追加され、各フレームはnumpy.arrayとして保存されます。 コード:

だからこの

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

と出力のようなものが

[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],....,[...]])] 

私が働くだろうと思った何か..を実装しますが、このエラーメッセージを取得しようとしたような方法で保存されています:

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

エラー:

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

これらをテンソルフローにどのように供給しますか?

答えて

0

tf.mul(X、W)は単なるスカラー倍であり(Wはコード内のスカラーです)、結果のシェイプはXのシェイプと同じになります。 XとYが同じ形をしていれば損失関数の減算が機能するようになります)。

XとYは一貫した形状をしていますか?その場合は、tf.reshape(X、[1、-1])とtf.reshape(Y、[1、-1])の行ベクトルに両方をフラット化することができます。これらのベクトルX_LENGTHとY_LENGTHの長さを呼び出します。次に、Wをtf.get_variable(name = "W"、shape = [X_LENGTH、Y_LENGTH])の行列にし、tf.mulの代わりにtf.matmul(X、W)を使用します。 matmul()の出力には、形状[1、Y_LENGTH]があります。これは、損失関数にある形状の問題を修正するはずです。

あなたがそれをしている間、各出力に対してバイアスを得るために、長さY_LENGTHのベクトルをbにすることができます。

+0

XとYは同じ形状ではありません... Xはこの場合の入力、yは出力です。入力と出力の形状は上の記事で説明したとおりです。それぞれの 'frame'サイズは同じですが、出力データの入れ子配列と同じ長さではありません。 XとYの形状は一貫しています。私はあなたのフラットな例を試しましたが、それは私のためにうまくいかないようですが、私はなぜわからないのですか? –

+0

私はあなたがそれを平らにする理由はあまりよく分かりません。それは既に構造のようなマトリックスに格納されているので、それが格納されているので、それを平坦化するのではなく読み込みが容易ではないでしょう。 –

+0

実際に各例の各フレームは同じ長さですが、それぞれのフレームの数は例は、オーディオファイルの長さによって異なる場合があります。 –

関連する問題