迭代完成逻辑回归模型

来源:互联网 发布:php手机短信验证 编辑:程序博客网 时间:2024/06/05 09:42
import numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltimport input_data#读取mnist数据集mnist=input_data.read_data_sets('data/',one_hot=True)trainimg=mnist.train.images#mnist的训练数据送给trainimgtrainlabel=mnist.train.labels#mnist的训练的label赋值给trainlabletestimg=mnist.test.images#mnist的训数据送给testimgtestlabel=mnist.test.labels#mnist的测试label送给testlabelprint("MNIST loaded")print(trainimg.shape)print(trainlabel.shape)print(testimg.shape)print(testlabel.shape)print(trainlabel[0])x=tf.placeholder("float",[None,784]) #定义一个占位符y=tf.placeholder("float",[None,10])W=tf.Variable(tf.zeros([784,10]))#初始化Wbb=tf.Variable(tf.zeros([10]))#softmax逻辑回归模型的扩展actv=tf.nn.softmax(tf.matmul(x,W)+b)#对所有的样本求均值 loss是平均的losscost=tf.reduce_mean(-tf.reduce_sum(y*tf.log(actv),reduction_indices=1))learning_rate=0.01optm=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)#########上面是搭的模型######################进入测试阶段#################prediction#tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False# 返回的值的矩阵维度和A是一样的#tf.argmax(vector, 1):返回的是vector中的最大值的索引号,如果vector是一个向量,那就返回一个值,# 如果是一个矩阵,那就返回一个向量,# 这个向量的每一个维度都是相对应矩阵行的最大值元素的索引号。pred=tf.equal(tf.argmax(actv,1),tf.argmax(y,1))#accuray#tf.reduce_mean(x) ==> 2.5 #如果不指定第二个参数,那么就在所有的元素中取平均值#tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二个参数为0,则第一维的元素取平均值,即每一列求平均值#tf.reduce_mean(x, 1) ==> [1.5,  3.5] #指定第二个参数为1,则第二维的元素取平均值,即每一行求平均值# cast(x, dtype, name=None)# x的数据格式转化成dtype.例如,原来x的数据格式是bool# 那么将其转化成float以后,就能够将其转化成01的序列。反之也可以accr=tf.reduce_mean(tf.cast(pred,"float"))init=tf.global_variables_initializer()sess=tf.InteractiveSession()# tf.InteractiveSession():它能让你在运行图的时候,插入一些计算图,# 这些计算图是由某些操作(operations)构成的。这对于工作在交互式环境中的人们来说非常便利,比如使用IPython# tf.Session():需要在启动session之前构建整个计算图,然后启动该计算图。# 意思就是在我们使用tf.InteractiveSession()来构建会话的时候,# 我们可以先构建一个session然后再定义操作(operation),# 如果我们使用tf.Session()来构建会话我们需要在会话构建之前定义好全部的操作(operation)然后再构建会话。arr=np.array([[31,23,4,24,27,34],              [18,3,25,0,6,35],              [28,14,33,22,20,8],              [13,30,21,19,7,9],              [16,1,26,32,2,29],              [17,12,5,11,10,15]             ])   #创建数组tf.argmax(arr,1).eval()training_epochs=50batch_size=100display_step=5sess=tf.Session()sess.run(init)for epoch in range(training_epochs):    avg_cost=0.    num_batch=int(mnist.train.num_examples/batch_size)    for i in range(num_batch):        batch_xs,batch_ys=mnist.train.next_batch(batch_size)        sess.run(optm,feed_dict={x:batch_xs,y:batch_ys})        feeds={x:batch_xs,y:batch_ys}        avg_cost+=sess.run(cost,feed_dict=feeds)/num_batch    if epoch % display_step==0:        feeds_train={x:batch_xs,y:batch_ys}        feeds_test={x:mnist.test.images,y:mnist.test.labels}        train_acc=sess.run(accr,feed_dict=feeds_train)        test_acc=sess.run(accr,feed_dict=feeds_test)        print("Epoch:%03d/%03d cost:%.9f train_acc:%.3f,test_acc:%.3f"              %(epoch,training_epochs,avg_cost,train_acc,test_acc))print("Done")