2017-09-01 101 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)