【问题标题】:Parse large dataset for regression using tensorflow使用 tensorflow 解析大型数据集以进行回归
【发布时间】:2016-10-30 11:53:32
【问题描述】:

我目前正在尝试为我要解决的回归任务设置 tensorflow。

我不确定我应该如何输入我的输入数据,因为它以某种方式存储。

我的输入是帧为 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()

如何将这些输入到 tensorflow 中?

【问题讨论】:

    标签: python numpy tensorflow


    【解决方案1】:

    tf.mul(X, W) 只是标量乘法(并且 W 是代码中的标量),因此生成的形状与 X 的形状相同,看起来就像错误来自哪里(唯一的方法如果 X 和 Y 具有相同的形状,则损失函数中的减法可能会起作用)。

    X 和 Y 在示例中是否具有一致的形状?如果是这样,您可能希望使用 tf.reshape(X, [1, -1]) 和 tf.reshape(Y, [1, -1]) 将两者展平为行向量。我将把这些向量的长度称为 X_LENGTH 和 Y_LENGTH。然后我会用 tf.get_variable(name="W", shape=[X_LENGTH, Y_LENGTH]) 使 W 成为一个矩阵,然后使用 tf.matmul(X, W) 而不是 tf.mul。 matmul() 的输出将具有形状 [1, Y_LENGTH],它应该可以解决您在损失函数中遇到的形状问题。

    当您使用它时,您可能希望将 b 设为长度为 Y_LENGTH 的向量,以获得每个输出的偏差。

    【讨论】:

    • X 和 Y 的形状不同...在这种情况下 X 是输入,y 是输出。输入和输出的形状如上述帖子中所述。每个frame 的大小都相同,但与输出数据上的嵌套数组的长度不同。 X 和 Y 在示例中的形状是一致的。我尝试了你的扁平化示例,但它似乎对我不起作用我不知道为什么?
    • 我不太清楚你为什么要把它展平。因为它已经存储在一个类似矩阵的结构中?在存储时读取它会不会更容易,而不是展平它,并从一定数量的提取数据中创建一个矩阵......
    • 其实每个例子中每一帧的长度都是一样的,但是每个例子中的帧数可能会因音频文件的长度而异。
    • 啊..该死的..那没关系..每一帧都有相同的长度。
    猜你喜欢
    • 2017-05-11
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多