基于tensorflow实现的鸢尾花预测模型
2018-09-07 18:02
375 查看
鸢尾花预测模型
1、数据处理
数据集包含150个数据集(其中120个是训练集
iris_training.csv,30个是测试集
iris_test.csv),分为3类(Setosa,Versicolour,Virginica),每类50个数据,每个数据包含4个属性:花萼长度,花萼宽度,花瓣长度,花瓣宽度。
120,4,setosa,versicolor,virginica 6.4,2.8,5.6,2.2,2 5.0,2.3,3.3,1.0,1 4.9,2.5,4.5,1.7,2 . . . . . . . . . . . . . . . 4.4,2.9,1.4,0.2,0 4.8,3.0,1.4,0.1,0 5.5,2.4,3.7,1.0,1
由于标签是鸢尾花的类别,因此将标签转换成独热编码[1, 0, 0], [0, 1, 0], [0, 0, 1]
可以用pandas包里的
get_dummies()函数实现,我这里是自己写的代码
train = np.array(pd.read_csv('D:/tensorflow_exercise/data/iris_training.csv') # 读取训练集数据 x_train = train[:, 0:4] # x_train是训练集的特征 rows = train.shape[0] y_train = np.array(np.zeros([rows, 3])) # 将标签转化为one-hot编码 for r in range(rows): label = int(train[r][4]) y_train[r][label] = 1
同理,测试集的话只需要修改读取路径和设置变量x_test和y_test即可
2、建立模型
采用tensorflow建立一个简单的线性模型:
W = tf.Variable(tf.zeros([4, 3])) b = tf.Variable(tf.zeros([3]) + 0.01) output = tf.nn.softmax(tf.matmul(xs, W) + b)
输出接一个
softmax函数
损失函数为交叉熵:
loss = -tf.reduce_sum(ys * tf.log(output + 1e-10))
采用梯度下降法最小化
loss,学习率设置为
0.001:
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
3、模型训练
模型建立好后,通过
tf.global_variables_initializer()对变量进行初始化
模型总共训练1000次,每100次输出
loss查看训练过程
for i in range(1000): sess.run(train_step, feed_dict={xs: x_train, ys: y_train}) if i % 100 == 0: print('Loss(train set):%.2f' % (sess.run(loss, feed_dict={xs: x_train, ys: y_train})))
4、鸢尾花种类预测
模型训练完毕之后,即可将测试集输入模型进行预测。由于预测结果是独热编码,所以准确率计算使用
tf.argmax()函数来实现。返回值是预测结果中最大值的索引,由于独热编码的性质,返回的索引值即为类别。
然后使用
tf.equal()判断是否与实际类别一致(返回值为bool型)。所以需要通过一个
tf.cast()函数来转换为[0, 1]值,最后取平均值求出准确率。[这个是直接参考的tensorflow中文教程]
access = tf.equal(tf.argmax(output, 1), tf.argmax(ys, 1)) accuracy = tf.reduce_mean(tf.cast(access, "float"))
5、结果
最后在训练集上以及测试集都得到一个较满意的结果
--------------------开始训练模型---------------- Loss(train set):125.14 Loss(train set):67.55 Loss(train set):30.55 Loss(train set):23.07 Loss(train set):20.45 Loss(train set):18.60 Loss(train set):17.22 Loss(train set):16.14 Loss(train set):15.28 Loss(train set):14.57 --------------------训练结束-------------------- ********************性能评价******************** 训练集准确率: 0.975 测试集准确率: 0.96666664
附上详细代码:
import pandas as pd import numpy as np import tensorflow as tf def main(): # 读取训练集数据 train = np.array(pd.read_csv('D:/tensorflow_exercise/data/iris_training.csv')) x_train = train[:, 0:4] rows = train.shape[0] y_train = np.array(np.zeros([rows, 3])) # 将标签转化为one-hot编码 for r in range(rows): label = int(train[r][4]) y_train[r][label] = 1 # 读取测试集数据 test = np.array(pd.read_csv('D:/tensorflow_exercise/data/iris_test.csv')) x_test = test[:, 0:4] rows = test.shape[0] y_test = np.array(np.zeros([rows, 3])) for r in range(rows): label = int(test[r][4]) y_test[r][label] = 1 xs = tf.placeholder(dtype='float', shape=[None, 4]) ys = tf.placeholder(dtype='float', shape=[None, 3]) W = tf.Variable(tf.zeros([4, 3])) b = tf.Variable(tf.zeros([3]) + 0.01) output = tf.nn.softmax(tf.matmul(xs, W) + b) # 输出加个softmax层 loss = -tf.reduce_sum(ys * tf.log(output + 1e-10)) # 损失函数用交叉熵 train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss) # 梯度下降法最小化损失函数 access = tf.equal(tf.argmax(output, 1), tf.argmax(ys, 1)) accuracy = tf.reduce_mean(tf.cast(access, "float")) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) print('--------------------开始训练模型--------------------') for i in range(1000): sess.run(train_step, feed_dict={xs: x_train, ys: y_train}) if i % 100 == 0: print('Loss(train set):%.2f' % (sess.run(loss, feed_dict={xs: x_train, ys: y_train}))) print('--------------------训练结束--------------------\n\n') print('************************性能评价************************') print('训练集准确率:', sess.run(accuracy, {xs: x_train, ys: y_train})) print('测试集准确率:', sess.run(accuracy, {xs: x_test, ys: y_test})) sess.close() if __name__ == '__main__': main()阅读更多
相关文章推荐
- TensorFlow实战12:实现基于LSTM的语言模型
- TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。
- 基于Scikit-learn实现回归模型——房价预测
- Tensorflow实例:实现基于LSTM的语言模型
- Alexnet网络模型在cifar-10数据集上的实现(基于tensorflow-gpu)
- 我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人
- TensorFlow实现基于LSTM的语言模型
- Python语言基于Tensorflow实现RNN(预测)
- R语言基于支持向量机训练模型实现类预测
- Keras:基于python库之Keras建立模型算法来实现【预测】功能的详细攻略(经典,建议收藏)
- AlexNet模型实现(4. 基于Tensorflow的python实现)
- TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人
- 基于循环神经网络实现基于字符的语言模型(char-level RNN Language Model)-tensorflow实现
- 基于TensorFlow实现Skip-Gram模型
- TensorFlow实现经典深度学习网络(6):TensorFlow实现基于LSTM的语言模型
- 你的颜值打几分?——基于tensorflow实现人脸打分模型
- tensorflow38《TensorFlow实战》笔记-07-02 TensorFlow实现基于LSTM的语言模型 code
- Tensorflow实战学习(三十五)【实现基于LSTM语言模型】
- 用tensorflow实现的,基于mnist数据集上的一个简易模型
- 加载tensorflow模型后只运行变量名实现预测(sess.run)