2017-09-01 104 views
2

我有一個數據集,每個項目有40個特徵值。 當我嘗試使用張量流(我對張量流是新的)構建神經網絡時,這行代碼引發了一個錯誤。Tensorflow train.batch問題

for _ in range(n_batches): 
      batches = tf.train.batch(input_list, batch_size=batch_size, enqueue_many=True, capacity=3) 

錯誤:

ValueError: Dimensions 1 and 40 are not compatible 

編輯: 輸入列表由在每個項目包含csv文件讀取特徵數據

with open('0.csv') as csvfile: 
spamreader = csv.reader(csvfile, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL) 
for row in spamreader: 
    input_list.append(row) 
    label.append([0,1]) 

作爲40個值來計算一個示例,csv文件如下所示:

-303.49402956575165,122.79163957162679,-11.468865795473208,3.9811327671171512,15.337415109639783,-14.108867251441396,-6.2515380667284548,-2.5776250066394879,-11.151238822575237,0.80064220417869125,0.27982062264574636,-7.4540404067320498,1.1294160621043878,-0.19718258671031155,-4.8998361975682672,1.4096255573297396,-1.7156108756597495,-4.8841327368201828,1.1763404024624535,-1.4828051938843485,-4.4185680752011773,-0.23408318097388262,-1.4313336679963722,-2.350002729608391,-0.012519210688780043,-1.1211450861767087,-0.28546877503470003,1.0960108052925126,0.017672759764874924,2.2723680886768522,2.9337076178657373,0.80627947017775015,2.7373411634266391,2.6117883927402459,-0.17306332146016015,1.3495579191555498,1.2670127235105628,-1.2019882636572772,-0.19807357792275704,-0.11667725657652298 
-324.95895982872742,129.16902362793437,-8.5782578426411202,4.8909691557978645,9.679460715739177,-21.516263281123845,-8.0416220828154454,-3.8078900557142812,-13.927945903788769,0.43952636061160394,-0.69085228125901854,-9.051802560349115,3.2384649283450346,0.51938767915475448,-7.6485369361057103,2.1827631457774346,-0.2975737631792475,-8.3214260824025619,-0.52396570369004059,1.1065859071072002,-2.3500738274356539,4.2447931265345034,7.879566058882304,6.0660506076869103,6.012983546020755,4.4649038449901903,2.1070954443797651,-0.26862183717859767,-1.495853591930427,0.52413729310912371,-0.85169785225746941,-3.675692955742599,-1.2819459279342635,-1.3243977571633176,-3.4214154132554886,-1.025319003875736,-1.5668864629221912,-4.3026170282653107,-1.9139061426068631,-0.64944140674848683 
+0

能告訴你input_list'是如何計算'? – GeertH

+0

@GeertH,我已經更新了這個問題! – user5722540

回答

1

您應該首先將輸入列表轉換爲單個數組。您可以提供一張張量/張數列表到,但是每張張將會被分成大小爲40的批次。目前,您正在提供批量大小爲1的張量列表,並且您要求爲這些張量的每個張量創建批量大小40。由於您無法通過1個示例創建40個示例,因此會出現維度不匹配。所以請改爲:

import numpy as np 
input_list = np.array(input_list) 
labels = np.array(labels) 
batch = tf.train.batch([input_list, labels], batch_size=batch_size, enqueue_many=True, capacity=3) 
inputs = batch[0] 
labels = batch[1] 

然後您可以使用輸入和標籤來定義您的網絡和丟失功能。例如(只是一個例子,代碼未測試):

hidden = tf.layers.dense(inputs, 2) 
loss = tf.softmax_cross_entropy_with_logits(labels=labels, logits=hidden) 
optimizer = tf.train.AdamOptimizer() 
train_op = optimizer.minimize(loss) 

另外請注意,你需要調用只有一次,而不是在一個循環。每次運行運行需要inputslabels,inputslabels將評估到不同的批次。

with tf.Session() as sess: 
    with tf.contrib.slim.queues.QueueRunners(sess): 
    for i in range(n_batches): 
     _, loss_value = sess.run([train_op, loss]) 
     print("Loss for batch {}: {}".format(i, loss_value)) 
+0

現在它給出的值必須是列表錯誤 – user5722540

+0

對不起,我編輯了我的答案。更新這一行:'批次= tf.train.batch([input_list],batch_size = batch_size,enqueue_many = True,容量= 3)' – GeertH

+0

它進入無限循環,並且什麼都不打印:( – user5722540

0

您可以傳遞input_list作爲張量列表。 tf.train.batch

for _ in range(n_batches): 
    batches = tf.train.batch([input_list], batch_size=batch_size, 
      enqueue_many=True, capacity=3)