2017-07-15 95 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]。这是否意味着成本函数不适合我的数据? –

相关问题