2016-11-17 3 views
0

私は単純なフィードフォワードネットワークを実装しようとしています。しかし、私はMATLABからのデータでプレースホルダを供給する方法を把握することはできません。この例: 私はmatlabからデータでプレースホルダをフィードする方法を見つけることができません

import tensorflow as tf 
import numpy as np 
import scipy.io as scio 
import math 

# # create data 
train_input=scio.loadmat('/Users/liutianyuan/Desktop/image_restore/data/input_for_tensor.mat') 
train_output=scio.loadmat('/Users/liutianyuan/Desktop/image_restore/data/output_for_tensor.mat') 
x_data=np.float32(train_input['input_for_tensor']) 
y_data=np.float32(train_output['output_for_tensor']) 

print x_data.shape 
print y_data.shape 
## create tensorflow structure start ### 
def add_layer(inputs, in_size, out_size, activation_function=None): 
    Weights = tf.Variable(tf.random_uniform([in_size,out_size], -4.0*math.sqrt(6.0/(in_size+out_size)), 4.0*math.sqrt(6.0/(in_size+out_size)))) 
    biases = tf.Variable(tf.zeros([1, out_size])) 
    Wx_plus_b = tf.matmul(inputs, Weights) + biases 
    if activation_function is None: 
     outputs = Wx_plus_b 
    else: 
     outputs = activation_function(Wx_plus_b) 
    return outputs 

xs = tf.placeholder(tf.float32, [None, 256]) 
ys = tf.placeholder(tf.float32, [None, 1024]) 
y= add_layer(xs, 256, 1024, activation_function=None) 

loss = tf.reduce_mean(tf.square(y - ys)) 
optimizer = tf.train.GradientDescentOptimizer(0.1) 
train = optimizer.minimize(loss) 

init = tf.initialize_all_variables() 
### create tensorflow structure end ### 

sess = tf.Session() 
sess.run(init) 

for step in range(201): 
    sess.run(train) 
    if step % 20 == 0: 
     print(step, sess.run(loss,feed_dict={xs: x_data, ys: y_data})) 

は私に次のエラーを与える:私はタイプとx_dataとy_dataの形状の両方をチェックした

/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/liutianyuan/PycharmProjects/untitled1/easycode.py 

(1, 256) 

(1, 1024) 

Traceback (most recent call last): 
    File "/Users/liutianyuan/PycharmProjects/untitled1/easycode.py", line 46, in <module> 
    sess.run(train) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 340, in run 
    run_metadata_ptr) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 564, in _run 
    feed_dict_string, options, run_metadata) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 637, in _do_run 
    target_list, options, run_metadata) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/client/session.py", line 659, in _do_call 
    e.code) 

tensorflow.python.framework.errors.InvalidArgumentError: **You must feed a value for placeholder tensor 'Placeholder' with dtype float** 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

Caused by op u'Placeholder', defined at: 

    File "/Users/liutianyuan/PycharmProjects/untitled1/easycode.py", line 30, in <module> 
    xs = tf.placeholder(tf.float32, [None, 256]) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/ops/array_ops.py", line 762, in placeholder 
    name=name) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 976, in _placeholder 
    name=name) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op 
    op_def=op_def) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/framework/ops.py", line 2154, in create_op 
    original_op=self._default_original_op, op_def=op_def) 

    File "/Library/Python/2.7/site-packages/tensorflow/python/framework/ops.py", line 1154, in __init__ 
    self._traceback = _extract_stack() 

は、それは彼らがcorretある縫い目。だから私は間違ってどこに理想がない。

+0

いいですね。 'sess.run(loss、feed_dict = {xs:tf.cast(x_data、tf.float32)、ys:tf.cast(y_data、tf.float32)}'? – sygi

+0

ありがとう、 –

答えて

0

trainの操作は、プレースホルダーxsysによって異なります。したがって、sess.run(train)を呼び出すと、これらのプレースホルダーの値を入力する必要があります。

これを行うための一般的な方法は、ミニバッチに入力データを分割することである:例の

BATCH_SIZE = ... 
for step in range(201): 
    # N.B. You'll need extra code to handle the cases where start_index and/or end_index 
    # wrap around the end of x_data and y_data. 
    start_index = step * BATCH_SIZE 
    end_index = (step + 1) * BATCH_SIZE 
    start_index = sess.run(train, {xs: x_data[start_index:end_index,:], 
            ys: y_data[start_index:end_index,:]}) 

コードはあなたが始めるためにだけです。フィードのためのデータを生成するためのより柔軟な方法については、tf.learnコードベースのMNIST dataset exampleを参照してください。

+0

ありがとう、テンソルフローの使い方を学ぶために単純なプログラムを書いたので、入力データは1つだけです –

+0

ありがとうございました!最初は私があなたが何を意味するのか理解できませんでしたが、あなたの答えを噛んで、私はそれが本当にうまくいくとわかります! –

0

mrryさんありがとうございます。問題は解決されました。 sess.run(train)のfeed_dictの部分が欠けていることがわかりました。適切なプログラムは:

for step in range(201): 
    sess.run(train,feed_dict={xs: x_data, ys: y_data}) 
    if step % 20 == 0: 
     print(step, sess.run(loss,feed_dict={xs: x_data, ys: y_data})) 
+0

mrryに感謝します! –

関連する問題