2017-08-30 169 views
1

我是TensorFlow的新人,最近我需要使用它來訓練ANN,而無需使用TensorFlow的高級API。TensorFlow - 如何使用Plain TensorFlow訓練ANN

但是,出事了用下面的代碼:

1.定義相關參數爲安

n_inputs = getVectorLength(instance2Path) 
n_outputs = 1 
n_hidden1 = 66 
n_hidden2 = 24 
learning_rate = 0.01 
n_epochs = 400 
batch_size = 50 

2. ANN

創建的每一個層
def neuron_layer(X, n_neurons, name, activation=None): 
    with tf.name_scope(name): 
     n_inputs = int(X.get_shape()[1]) 
     stddevValue = 2/np.sqrt(n_inputs) 
     initWeight = tf.truncated_normal((n_inputs, n_neurons), stddev=stddevValue) 
     W = tf.Variable(initWeight, name='weights', dtype='float') 
     b = tf.Variable(tf.zeros([n_neurons]), name='biases') 
     z = tf.matmul(X, W) + b 
     if activation == 'relu': 
      return tf.nn.relu(z) 
     elif name == 'outputs': 
      return tf.sigmoid(z) 
     pass 
    pass 

3.生成TensorFlow圖表

X = tf.placeholder(dtype=tf.float32, shape=(None, n_inputs), name='X') 
y = tf.placeholder(dtype=tf.float32, shape=(None), name='y') 
hidden1 = neuron_layer(X, n_hidden1, 'hidden1', activation='relu') 
hidden2 = neuron_layer(hidden1, n_hidden2, 'hidden2', activation='relu') 
outputs = neuron_layer(hidden2, n_outputs, 'outputs') 
init = tf.global_variables_initializer() 

4.運行與會話

with tf.Session() as sess: 
    print n_inputs 
    sess.run(init) 

    samples, labels = prepareSampleAndLabelAndFeature(ConfigVars.FeatureSelectionStrategy2, instance2Path) 
    sample = np.array(samples[0]) 
    sample = sample.reshape(1, 170) 
    sess.run(outputs, feed_dict={X: sample}) 
    print outputs.eval() 

5.問題

運行上面的代碼後,我得到了以下情況除外:

Caused by op u'X', defined at: 
    File "/Users/apple/PycharmProjects/TesTensorFlow/TrainANN/ANNTest.py", line 45, in <module> 
    X = tf.placeholder(dtype=tf.float32, shape=(None, n_inputs), name='X') 
    File "/Users/apple/anaconda/envs/TensorFlow_GPU/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 1507, in placeholder 
    name=name) 
    File "/Users/apple/anaconda/envs/TensorFlow_GPU/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1997, in _placeholder 
    name=name) 
    File "/Users/apple/anaconda/envs/TensorFlow_GPU/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 768, in apply_op 
    op_def=op_def) 
    File "/Users/apple/anaconda/envs/TensorFlow_GPU/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2336, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/Users/apple/anaconda/envs/TensorFlow_GPU/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1228, in __init__ 
    self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'X' with dtype float 
    [[Node: X = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

在我看來,也許問題上的數據類型計數的X,但我已檢查! X的輸入向量類似於[0,1,0,1 .....],只包含0-1個值,標號爲0和1,或者是典型的二進制分類問題。

+0

什麼的'samples' –

+0

樣品的形狀和類型和標籤都是蟒蛇內置的「列表」類型,在(39170)形狀的樣品和標籤是(39),一1D list – FrankRong

+0

嘗試'sample = sample.reshape(1,170).astype(float)' –

回答