张量流实数

2024-09-30 14:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个基于这个Tensorflow example 的代码。我面临的问题是,我得到的准确度没有任何意义(要么是1,要么是0),所以我的问题是我在这里遗漏了什么?在

import tensorflow as tf
import  numpy as np
import  csv
import os


#defining  batch fuuntion

def batch(iterable, n=1):
    l = len(iterable)
    for ndx in range(0, l, n):
        yield iterable[ndx:min(ndx + n, l)]


os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
Training_File = 'Training.csv'
Test_File     = 'Test.csv'
numberOFClasses = 19
batchSize = 19

# read training data
filePointer  = open(Training_File, 'r', newline='')
reader = csv.reader(filePointer)
Training_Data   = []
Training_Labels = []
row = next(reader)
len(row)
#### Getting Training_Data and labels
for  row in reader:
    Training_Data.append(row[:-2])
    Training_Labels.append(row[-1])
# close TrainingFile  and  getting Data and labels from Test
len(Training_Data)
filePointer.close();

filePointer =open(Test_File, 'r', newline='')
reader  =   csv.reader(filePointer)
Test_Data = []
Test_Labels=[]
row = next(reader)

for row in reader:
    Test_Data.append(row[:-2])
    Test_Labels.append(row[-1])
len(Test_Labels)
filePointer.close()
len(Training_Data[0])



x = tf.placeholder('float',[None,len(row[:-2])])
w = tf.Variable(tf.zeros([len(row[:-2]),numberOFClasses]))
b = tf.Variable(tf.zeros([numberOFClasses]))
model = tf.add(tf.matmul(x,w),b)
y_ = tf.placeholder(tf.float32,[None,numberOFClasses])
y =  tf.nn.softmax(model)

cross_entropy= -tf.reduce_sum(y_*tf.log(y),reduction_indices=[1])
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
index =0
batch_xs = []
batch_ys = []
batch_txs= []
batch_tys= []
# Training processing


for i in batch(Training_Data,batchSize):
    batch_xs.append(i)
for i in batch(Training_Labels,batchSize):
    batch_ys.append(i)

for i in batch(Test_Data,batchSize):
    batch_txs.append(i)
for i in batch(Test_Labels,batchSize):
    batch_tys.append(i)


#print(np.reshape(batch_ys[len],(1,batchSize)))
for i in range(len(batch_xs) -1 ):
    sess.run(train_step,feed_dict={x:batch_xs[i],y_:np.reshape(batch_ys[i],(1,batchSize))})



correct_prediction = tf.equal(tf.arg_max(y,1),tf.arg_max(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
for i in range(len(batch_txs) -1):
    print(sess.run(accuracy,feed_dict={x:batch_txs[i],y_:np.reshape(batch_tys[i],(1,batchSize))}))

更新 我改变了批次的大小:

^{pr2}$

结果还是一样,所以我没有得到我所缺少的

2重复

运行这部分代码: 对于范围内的j(长度(批次×x)-1): 打印(sess.运行(训练步骤,进纸步骤={x:batch_xs[j],y\np.重塑(批次[j],(numberOFClasses,3))})

传递了一个巨大的错误消息,但我想这部分是相关的:

InvalidArgumentError (see above for traceback): Incompatible shapes: [19,3] vs. [57,19]
 [[Node: mul = Mul[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_Placeholder_1_0, Log)]]

因此,由于我的批处理大小是树乘以类的数量,所以我应该得到57个预测->;Y\。在

Y形进给的成形[57,1]

对于范围内的j(长度(批次×x)-1): 打印(sess.运行(训练步骤,进纸步骤={x:batch_xs[j],y\np.重塑(批次[j],(batchSize,1))})

打印输出None作为返回值,但是没有错误,这(我想)是可以的。在

但是运行精度部分可以得到1和0,正如前面提到的。在

测试和列车数据和标签100%正确!在

以下是CSV文件结尾部分:

enter image description here


Tags: intestfordatalabelslentfnp
2条回答

它不可能是您的问题或错误的根源,但我认为,如果您想获取除一个索引之外的所有索引,则行[:-2]的所有出现都应该被行[:-1]替换(Python排除了在row[begin:end]中给定的索引end

你应该有:

y_ = tf.placeholder(tf.float32,[None,numberOFClasses])
...
sess.run(train_step,feed_dict={x:batch_xs[i],y_:np.reshape(batch_ys[i],(batchSize, numberOFClasses ))})
...
print(sess.run(accuracy,feed_dict={x:batch_txs[i],y_:np.reshape(batch_tys[i],(batchSize, numberOFClasses ))}))

无论如何,您应该明确地使用batch_size != numberOFClasses,因为它会抛出一个错误,您可以用它来理解代码中的错误。如果不这样做,您将丢失异常消息,但错误仍然存在,隐藏(您的网络仍然无法了解您想要的内容)。当你得到错误时,看看是哪个形状造成了问题,并试着理解原因(看看形状是什么,应该是什么)

从您的代码示例中,不可能准确地判断(至少batch()和batchSize确实缺失),但我的猜测是,您的批大小为1(无论是否有意),因此您可以获得一个精度(如果样本预测正确)或零(如果样本被错误分类)。为了获得有意义的精确度,您需要对较大的批次进行评估。在

相关问题 更多 >