2017-07-15 92 views
0

我無法理解尺寸部分。它是關於我設置的形狀[1,15]嗎?尺寸必須相同,但對於'MatMul_1'(op:'MatMul'),其值爲15和1,輸入形狀爲:[1,15],[1,500]

import tensorflow as tf 
import numpy as np 
import pandas as pd 



with open('train.CSV', 'r') as f: 
    data0 = f.readlines() 

    for line in data0: 
     odom = line.split()   
     numbers_float0 = map(float, odom) 

with open('trainY.CSV', 'r') as f: 
    data1 = f.readlines() 

for line in data1: 
    odom = line.split()   
    numbers_float1 = map(float, odom) 

with open('test.CSV', 'r') as f: 
    data2 = f.readlines() 

    for line in data2: 
     odom = line.split()   
     numbers_float2 = map(float, odom) 

with open('Test Y.CSV', 'r') as f: 
    data3 = f.readlines()  

    for line in data3: 
     odom = line.split()  
     numbers_float3 = map(float, odom) 



train_x,train_y,test_x,test_y =    ('numbers_float0','numbers_float1','numbers_float2','numbers_float3') 
n_nodes_hl1 = 500 
n_nodes_hl2 = 500 
n_nodes_hl3 = 500 

n_classes = 2 
batch_size = 100 
hm_epochs = 10 

x =tf.placeholder('float',[1,15]) 
y = tf.placeholder('float',[1,1]) 

hidden_1_layer = {'f_fum':n_nodes_hl1, 
        'weight':tf.Variable(tf.random_normal([len(train_x[0]),   n_nodes_hl1])), 
        'bias':tf.Variable(tf.random_normal([n_nodes_hl1]))} 

hidden_2_layer = {'f_fum':n_nodes_hl2, 
        'weight':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 
        'bias':tf.Variable(tf.random_normal([n_nodes_hl2]))} 

hidden_3_layer = {'f_fum':n_nodes_hl3, 
        'weight':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 
       'bias':tf.Variable(tf.random_normal([n_nodes_hl3]))} 

output_layer = {'f_fum':None, 
      'weight':tf.Variable(tf.random_normal([n_nodes_hl3, n_classes])), 
       'bias':tf.Variable(tf.random_normal([n_classes])),} 


# Nothing changes 
def neural_network_model(data): 

    l1 = tf.add(tf.matmul(data,hidden_1_layer['weight']),  hidden_1_layer['bias']) 
    l1 = tf.nn.relu(l1) 

    l2 = tf.add(tf.matmul(l1,hidden_2_layer['weight']),  hidden_2_layer['bias']) 
    l2 = tf.nn.relu(l2) 

    l3 = tf.add(tf.matmul(l2,hidden_3_layer['weight']), hidden_3_layer['bias']) 
    l3 = tf.nn.relu(l3) 

    output = tf.matmul(l3,output_layer['weight']) + output_layer['bias'] 

    return output 

def train_neural_network(x): 
    prediction = neural_network_model(x) 
    cost =  tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) 
    #tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction,y)) 




    optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost) 

    with tf.Session() as sess: 
     sess.run(tf.initialize_all_variables()) 

     for epoch in range(hm_epochs): 
      epoch_loss = 0 
      i=0 
      while i < len(train_x): 
       start = i 
       end = i+batch_size 
       batch_x = np.array(train_x[start:end]) 
       batch_y = np.array(train_y[start:end]) 

       _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, 
                  y: batch_y}) 
       epoch_loss += c 
       i+=batch_size 

      print('Epoch', epoch+1, 'completed out of',hm_epochs,'loss:',epoch_loss) 
     correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 
     accuracy = tf.reduce_mean(tf.cast(correct, 'float')) 

     print('Accuracy:',accuracy.eval({x:test_x, y:test_y})) 


train_neural_network(x) 

這裏是跟蹤誤差:enter image description here

下面是數據train.CSV enter image description here

我使用的Y數據只有一列。

+2

由於OP需要學習矩陣乘法的工作原理 –

+0

當我將節點數改爲15時,跟蹤誤差變爲維0,這兩個形狀必須相等,但是'SoftmaxCrossEntropyWithLogits_7'(op:'SoftmaxCrossEntropyWithLogits')的輸入形狀爲[15,1],[0,1]。這是否意味着成本函數不適合我的數據? –

回答

0

從技術上說,佔位符根本不需要形狀。它可以被定義爲這樣。

x = tf.placeholder('float', shape=[]) 

在這種情況下,佔位符本身沒有形狀信息。如果您知道張量的尺寸,但不是實際的數字形狀,我們用None替換該尺寸的數值,因爲它可以具有可變尺寸。

x = tf.placeholder('float', shape=[None, None, None]) 

這會影響到一些下游的靜態形狀分析認爲tensorflow確實獲得形狀信息,但否則按預期應該仍然工作。

+0

感謝您的幫助。所以如果我需要這個形狀,我應該設置什麼?因爲我希望每次輸入15位數值到佔位符中。 –

+0

當我將節點數量更改爲15時,跟蹤錯誤變爲維度0,兩種形狀的維度都必須相等,但對於'SoftmaxCrossEntropyWithLogits_7'(op:'SoftmaxCrossEntropyWithLogits'),其值爲15和0,輸入形狀爲[15,1], [0,1]。這是否意味着成本函數不適合我的數據? –

相關問題