Skip to main content
 首页 » 编程设计

python之Tensorflow train.batch 问题

2025年02月15日27zhujiabin

我有一个数据集,每个项目有 40 个特征值。 当我尝试使用 tensorflow 构建神经网络时(我是 tensorflow 的新手),这行代码会引发错误。

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文件计算出来的,每个item包含40个特征数据值

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]) 

作为示例,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 

请您参考如下方法:

您应该先将输入列表转换为单个数组。您可以向 tf.batch 提供张量/数组列表,但随后每个张量将分成大小为 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) 

另请注意,您只需调用一次 tf.batch,而不是循环调用。每次运行需要 inputs 或 labels 的操作时,inputs 和 labels 将评估为不同的批处理。

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))