2017-02-07 11 views
1

私はテンソルフローで初めての試みをしています - 私は線形回帰を学習しようとしています。 10次​​元、Xとスカラー、Yを出力する。具体的には、私は閉形式のグラデーションベースのソリューションを使用しようとしている。Tensorflow InvalidArgumentError(上記のトレースバック参照):互換性のない図形:[10000,10]対[10000]

私は次のエラーを受け取りました。私は何が間違っているのか分かりません。正しい方向に私を向ける何かが大いに評価されるでしょう!ここで

PS C:\Users\Dave\Documents\School\Deep Learning\Assignment_1> python test1.py 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfu 
lly opened CUDA library cublas64_80.dll locally 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfu 
lly opened CUDA library cudnn64_5.dll locally 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfu 
lly opened CUDA library cufft64_80.dll locally 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfu 
lly opened CUDA library nvcuda.dll locally 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:128] successfu 
lly opened CUDA library curand64_80.dll locally 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] F 
ound device 0 with properties: 
name: GeForce GTX 1080 
major: 6 minor: 1 memoryClockRate (GHz) 1.86 
pciBusID 0000:01:00.0 
Total memory: 8.00GiB 
Free memory: 6.63GiB 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] D 
MA: 0 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0 
: Y 
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] C 
reating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0) 
Traceback (most recent call last): 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 10 
    return fn(*args) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 10 
    status, run_metadata) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\errors_impl.py", 
n_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [10000,10] vs. [10000] 
     [[Node: sub = Sub[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Add, _recv_Placeholder_1_0/_7)]] 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "test1.py", line 43, in <module> 
    c = sess.run(cost, feed_dict={X: train_X, Y: train_Y}) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 76 
    run_metadata_ptr) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 96 
    feed_dict_string, options, run_metadata) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 10 
    target_list, options, run_metadata) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 10 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [10000,10] vs. [10000] 
     [[Node: sub = Sub[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Add, _recv_Placeholder_1_0/_7)]] 

Caused by op 'sub', defined at: 
    File "test1.py", line 25, in <module> 
    cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\ops\math_ops.py", line 814, 
    return func(x, y, name=name) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\ops\gen_math_ops.py", line 
    result = _op_def_lib.apply_op("Sub", x=x, y=y, name=name) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\op_def_library.py 
    op_def=op_def) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 224 
    original_op=self._default_original_op, op_def=op_def) 
    File "C:\Users\Dave\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 112 
    self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): Incompatible shapes: [10000,10] vs. [10000] 
     [[Node: sub = Sub[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Add, _recv_Placeholder_1_0/_7)]] 

私のコードです:

import numpy as np 
import tensorflow as tf 
import matplotlib.pyplot as plt 
rng = np.random 

#from IPython import get_ipython 
#get_ipython().run_line_magic('matplotlib', 'inline') 

learning_rate = 0.01 
training_epochs = 1000 
display_step = 50 

train_X = np.loadtxt('data.txt', usecols=[0,1,2,3,4,5,6,7,8,9]) 
train_Y = np.loadtxt('data.txt', usecols=[10]) 
n_samples = train_X.shape[0] 
X = tf.placeholder(tf.float32) 
Y = tf.placeholder(tf.float32) 
W = tf.Variable(rng.randn(), name = "weight") 
b = tf.Variable(rng.randn(), name = "bias") 

#build the 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) 

#initialize the variables 
init = tf.global_variables_initializer() 
#launch the graph 
with tf.Session() as sess: 
    sess.run(init) 

    #fit training data 
    for epoch in range(training_epochs): 
     for (x, y) in zip(train_X, train_Y): 
      sess.run(optimizer, feed_dict = {X: x, Y: y}) 

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

    #print "Optimization done" 
    training_cost = sess.run(cost, feed_dict={X: train_X, Y: train_Y}) 
    #print "Training cost=", training_cost, "W=", sess.run(W), "b=" sess.run(b), '\n' 

    #display graphically 
    plt.plot(train_X, train_Y, 'ro', label = 'Orig data') 
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label = 'Fitted Line') 
    plt.legend() 
    plt.show() 

答えて

1

私はtensorflowを知らないと私はあなたのコード内で起こっている正確に何か分からないので、私はベースの推測を作るしようとしていますnumpyの動作でこれをコメントとして追加しようとしていましたが、時間がかかりすぎました。それは10列を(それは2D配列の)を有しているので、それは単一の列(これは2D配列の)であるのでtrain_Yは、形状(10000,)でありながら

もし訓練データをロードし、train_Xは、形状(10000,10)です。これらの2つの図形は一緒にブロードキャストできないため、pred-YpredYには互換性のない形があります。これにはtrain_Xを転記するか、train_Yを形状の配列(10000,1)に変換して互換性を持たせる必要があります。前者はunpack=Truenp.loadtxtに渡すことで可能です。後者はtrain_Y = train_Y[:,None](少なくとも私の疑いはunpack=Trueはこの場合は助けにならないが、とにかく試してみる価値があるということです)のようなものです。

しかし、配列を転置する場合は、トレーニングループがまだ機能するように注意する必要があります。現在(10000,10)という形の配列は、長さ10のリストの長さ10000のリストに相当し、(10000,)の形の配列は長さ10000の単一のリストと同等です。これらはうまくいってzip一緒にペダルすることができます。あなたは、転置作品を放送するためにtrain_Xを言う場合は、このループを変更する必要があります:後知恵で

for (x, y) in zip(train_X.T, train_Y): 
     sess.run(optimizer, feed_dict = {X: x, Y: y}) 

、私はおそらくあなたが最初の寸法ことを確実にするために戻ってtrain_Xために移調する必要があることを意味train_Xtrain_Yがジップアップにマッチします。

転置は、プロットなど後の手順にも影響する可能性があります。奇妙な出力やエラーがある場合は、転置する必要があります。あるいは、テンソルフローに特化した操作だけを転置するだけです(しかし、私はこの部分に慣れていないので、これを慣用的に行うことができるかどうか、またその方法についてはわかりません)。

関連する問題