# -*- coding: utf-8 -*-
# @Time : 2018/12/14 10:08
# @Author : WenZhao
# @Email : [email protected]
# @File : iris.py
# @Software: PyCharm
'''
区分花(多分类):softmax回归
'''
import requests
import numpy as np
import pandas as pd
import tensorflow as tf
# 数据预处理
r=requests.get('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')
with open('./data/iris.data','w') as f:
f.write(r.text)
data=pd.read_csv('./data/iris.data',names=['e_cd','e_kd','b_cd','b_kd','cat'])
# 独热编号
data['c1']=np.array(data['cat']=='Iris-setosa').astype(np.float32)
data['c2']=np.array(data['cat']=='Iris-versicolor').astype(np.float32)
data['c3']=np.array(data['cat']=='Iris-virginica').astype(np.float32)
del data['cat']
# 合并行
target=np.stack([data.c1.values,data.c2.values,data.c3.values]).T
shuju=np.stack([data.e_cd.values,data.e_kd.values,data.b_cd.values,data.b_kd.values]).T
print(target.shape,shuju.shape)
# 定义网络
x=tf.placeholder("float",shape=[None,4])
y=tf.placeholder("float",shape=[None,3])
weight=tf.Variable(tf.truncated_normal([4,3]))
bias=tf.Variable(tf.truncated_normal([3]))
combine_input=tf.matmul(x,weight)+bias
pred=tf.nn.softmax(combine_input)
# 损失函数
loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=combine_input))
# 正确率
correct_pred=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))
# 梯度下降
train_step=tf.train.AdadeltaOptimizer(0.05).minimize(loss)
sess=tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(10000):
index=np.random.permutation(len(target))
shuju=shuju[index]
target=target[index]
sess.run(train_step,feed_dict={x:shuju,y:target})
if i%1000==0:
print(sess.run((loss,accuracy),feed_dict={x:shuju,y:target}))
多分类(softmax处理iris数据集)
猜你喜欢
转载自blog.csdn.net/agjllxchjy/article/details/85000035
今日推荐
周排行