首页 > 分享 > Tensorflow:softmax处理Iris鸾尾花分类

Tensorflow:softmax处理Iris鸾尾花分类

经典的分类模型,鸾尾花的分类。
数据集样例:

lengthsepal widthpetal lengthpetal widthclass5.13.51.40.2Iris-setosa4.931.40.2Iris-versicolor4.73.21.30.2Iris-virginica

主要是使用softmax来做多类别分类,
残差函数使用的是熵: -y*log(predicY)
代码:

__author__ = 'jmh081701' #coding:utf-8 import tensorflow as tf import numpy as np import pandas as pd import os W =tf.Variable(np.random.randn(4,3),dtype=tf.float32,name='W') b =tf.Variable(0,dtype=tf.float32,name='bias') def softmax(x): x=tf.to_float(x) y=[] y=tf.exp(x) z=tf.reduce_sum(y,1) z=tf.transpose([z,z,z]) z=y/z #tensorflow的矩阵除法:同一位置的元素相除 return z def load_csv(filename): df=pd.read_csv(filename) return df def inputs(df,tables): X=[] Y=[] length =len(df) for i in range(0,length): x=[df.ix[i]['sepal length'],df.ix[i]['sepal width'],df.ix[i]['petal length'],df.ix[i]['petal length']] y=df.ix[i]['class'] if(y=='Iris-setosa'): y=[1,0,0] elif (y=='Iris-versicolor'): y=[0,1,0] else: y=[0,0,1] X.append(x) Y.append(y) X=tf.to_float(X) Y=tf.to_float(Y) return X,Y def combine(X): rst = tf.add(tf.matmul(X,W),b,name='combine_add_as_x') #print(sess.run([X,rst])) return rst def loss(X,Y): predictY=inference(X) logy=tf.log(predictY) l=-Y*logy rst=tf.reduce_sum(l) #print("rst",sess.run(rst)) return rst def train(total_loss): rate=0.0001 return tf.train.GradientDescentOptimizer(learning_rate=rate).minimize(total_loss) def evaluate(X,Y,sess=None): #评估函数 predictY=inference(X) predictY=tf.to_int32(tf.arg_max(predictY,1)) #按列取最大下标 Y=tf.to_int32(Y) Y=tf.to_int32(tf.arg_max(Y,1)) #按列取最大下标 rate =sess.run(tf.reduce_mean(tf.to_float(tf.equal(Y,predictY)))) #reduce_mean是将矩阵的每一个元素相加求和 print("evaluate:",rate) return rate def load_model(sess,saver,filedir,filename): ckpt=tf.train.get_checkpoint_state(filedir) if( ckpt and ckpt.model_checkpoint_path): saver.restore(sess,filedir+".\"+filename) #载入模型 def inference(x): return softmax(combine(x)) if __name__ == '__main__': saver=tf.train.Saver() dir=r"D:\data\Iris\" modelfile="my-model.cpt" with tf.Session() as sess: init =tf.initialize_all_variables() sess.run(init) coord= tf.train.Coordinator() threads =tf.train.start_queue_runners(sess,coord) df =load_csv(dir+"train.csv") X,Y=inputs(df, None) total_loss =loss(X,Y) train_op=train(total_loss) step =0 ratesum=0 i=0 sameMax=20 load_model(sess,saver,dir,modelfile) while True: step=step+1 l,op=sess.run([total_loss,train_op]) if(step%20==0): rate=evaluate(X,Y,sess) ratesum=ratesum+rate i=i+1 if(i%sameMax==0): #如果sameMax次的测试率都是一样的,近似于收敛,那么停止训练 ratesum=ratesum/sameMax if(ratesum==rate): break saver.save(sess,dir+modelfile) else: ratesum=0 i=0 if(step>10000): saver.save(sess,dir+modelfile) break coord.request_stop() coord.join(threads) print("training over!!!") evaluate(X,Y,sess) saver.save(sess,dir+modelfile)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122

最后准确率是94%左右

相关知识

TensorFlow使用BP神经网络实现鸢尾花分类
TensorFlow学习记录(八)
深度学习TensorFlow 线性分类案例鸢尾花分类
第3章(下)基于Softmax回归完成鸢尾花分类任务
基于TensorFlow实现LSTM的鸢尾花数据分类
鸾尾花和鸢尾花的区别
Tensorflow五种花卉分类
使用鸢尾花数据集构建神经网络模型
TensorFlow入门
TensorFlow 2建立神经网络分类模型——以iris数据为例

网址: Tensorflow:softmax处理Iris鸾尾花分类 https://m.huajiangbk.com/newsview1354145.html

所属分类:花卉
上一篇: 机器学习:KNN算法实现对鸾尾花
下一篇: 机器学习——鸢尾花简单神经网络实