Iris Classification on Tensorflow
Iris Classification on Tensorflow
Neural Network
formula derivation
a & = x \cdot w_1 \\
y & = a \cdot w_2 \\
& = x \cdot w_1 \cdot w_2 \\
y & = softmax(y)
\end{align}
\]
code (training only)
y = a \cdot w_2
\]
w1 = tf.Variable(tf.random_normal([4,5], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([5,3], stddev=1, seed=1))
x = tf.placeholder(tf.float32, shape=(None, 4), name='x-input')
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
既然是有监督学习,那就在训练阶段必须要给出 label,以此来计算交叉熵
# 用来存储数据的标签
y_ = tf.placeholder(tf.float32, shape=(None, 3), name='y-input')
隐藏层的激活函数是 sigmoid
y = tf.sigmoid(y)
softmax 与 交叉熵(corss entropy) 的组合函数,损失函数是交叉熵的均值
# softmax & corss_entropy
cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_, logits=y)
# mean
cross_entropy_mean = tf.reduce_mean(cross_entropy)
为了防止神经网络过拟合,需加入正则化项,一般选取 “L2 正则化”
loss = cross_entropy_mean + \
tf.contrib.layers.l2_regularizer(regulation_lamda)(w1) + \
tf.contrib.layers.l2_regularizer(regulation_lamda)(w2)
为了加速神经网络的训练过程,需加入“指数衰减”技术
表示训练过程的计算图,优化方法选择了 Adam 算法,本质是反向传播算法。还可以选择“梯度下降法”(GradientDescentOptimizer)
train_step = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)
训练阶段
with tf.Session() as sess: # Session 最好在“上下文机制”中开启,以防资源泄露
init_op = tf.global_variables_initializer() # 初始化网络中节点的参数,主要是 w1,w2
sess.run(init_op)
steps = 10000
for i in range(steps):
beg = (i * batch_size) % dataset_size # 计算 batch
end = min(beg+batch_size, dataset_size) # 计算 batch
sess.run(train_step, feed_dict={x:X[beg:end], y_:Y[beg:end]}) # 反向传播,训练网络
if i % 1000 == 0:
total_corss_entropy = sess.run( # 计算交叉熵
cross_entropy_mean, # 计算交叉熵
feed_dict={x:X, y_:Y} # 计算交叉熵
)
print("After %d training steps, cross entropy on all data is %g" % (i, total_corss_entropy))
在训练阶段中,需要引入“滑动平均模型”来提高模型在测试数据上的健壮性(这是书上的说法,而我认为是泛化能力)
全部代码
# -*- encoding=utf8 -*-
from sklearn.datasets import load_iris
import tensorflow as tf
def label_convert(Y):
l = list()
for y in Y:
if y == 0:
l.append([1,0,0])
elif y == 1:
l.append([0, 1, 0])
elif y == 2:
l.append([0, 0, 1])
return l
def load_data():
iris = load_iris()
X = iris.data
Y = label_convert(iris.target)
return (X,Y)
if __name__ == '__main__':
X,Y = load_data()
learning_rate = 0.001
batch_size = 10
dataset_size = 150
regulation_lamda = 0.001
w1 = tf.Variable(tf.random_normal([4,5], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([5,3], stddev=1, seed=1))
x = tf.placeholder(tf.float32, shape=(None, 4), name='x-input')
y_ = tf.placeholder(tf.float32, shape=(None, 3), name='y-input')
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
y = tf.sigmoid(y)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_, logits=y)
cross_entropy_mean = tf.reduce_mean(cross_entropy)
loss = cross_entropy_mean + \
tf.contrib.layers.l2_regularizer(regulation_lamda)(w1) + \
tf.contrib.layers.l2_regularizer(regulation_lamda)(w2)
train_step = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
steps = 10000
for i in range(steps):
beg = (i * batch_size) % dataset_size
end = min(beg+batch_size, dataset_size)
sess.run(train_step, feed_dict={x:X[beg:end], y_:Y[beg:end]})
if i % 1000 == 0:
total_corss_entropy = sess.run(
cross_entropy_mean,
feed_dict={x:X, y_:Y}
)
print("After %d training steps, cross entropy on all data is %g" % (i, total_corss_entropy))
print(sess.run(w1))
print(sess.run(w2))
Experiment Result
random split cross validation
Iris Classification on Tensorflow的更多相关文章
- Iris Classification on Keras
Iris Classification on Keras Installation Python3 版本为 3.6.4 : : Anaconda conda install tensorflow==1 ...
- Implementing a CNN for Text Classification in TensorFlow
参考: 1.Understanding Convolutional Neural Networks for NLP 2.Implementing a CNN for Text Classificati ...
- [转] Implementing a CNN for Text Classification in TensorFlow
Github上的一个开源项目,文档讲得极清晰 Github - https://github.com/dennybritz/cnn-text-classification-tf 原文- http:// ...
- Iris Classification on PyTorch
Iris Classification on PyTorch code # -*- coding:utf8 -*- from sklearn.datasets import load_iris fro ...
- CNN tensorflow text classification CNN文本分类的例子
from:http://deeplearning.lipingyang.org/tensorflow-examples-text/ TensorFlow examples (text-based) T ...
- python tensorflow model
step01_formula # -*- coding: utf-8 -*- """ 단순 선형회귀방정식 : x(1) -> y - y = a*X + b (a ...
- Chinese-Text-Classification,用卷积神经网络基于 Tensorflow 实现的中文文本分类。
用卷积神经网络基于 Tensorflow 实现的中文文本分类 项目地址: https://github.com/fendouai/Chinese-Text-Classification 欢迎提问:ht ...
- TensorFlow 中文资源全集,官方网站,安装教程,入门教程,实战项目,学习路径。
Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...
- 在 TensorFlow 中实现文本分类的卷积神经网络
在TensorFlow中实现文本分类的卷积神经网络 Github提供了完整的代码: https://github.com/dennybritz/cnn-text-classification-tf 在 ...
随机推荐
- nvm(Node Version Manager)管理node版本
nvm全称Node Version Manager是 Nodejs 版本管理器,它让我们能方便的对 Nodejs 的版 本进行切换. nvm 的官方版本只支持 Linux 和 Mac. Windows ...
- 软件测试常用Linux命令
有些技能可以事半功倍,有些命运掌握在我们手中.熟练的掌握和使用这些命令可以提高工作效率,并且结合这些命令对测试过程中遇到的问题进行一些初步的定位. 1 目录与文件操作 1.1 ls(初级) 使用权限: ...
- iOS 开发笔记-Objective-C之KVC、KVO
概述 键值编码(KVC).键值监听(KVO)特性 键值监听KVO Key Value Observing(简称KVO)其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属 ...
- ElementNotVisibleException: Message: element not visible
selenium自动化测试中,经常会报异常: 可能会有各种疑问,元素可以定位到啊.为什么报以下异常? ElementNotVisibleException: Message: element not ...
- spring注解式开发之视图解析器
http://localhost:8089/springmvc-04-viewResovler/springmvc/hello
- HTML5 缓存
一.在html/htm文件中声明缓存,声明方式: <!DOCTYPE HTML> <html manifest="demo.appcache">...3 & ...
- poj1741 树上的分治
题意是说给了n个点的树n<=10000,问有多少个点对例如(a,b)他们的之间的距离小于等于k 采用树的分治做 #include <iostream> #include <cs ...
- 【Hadoop学习之八】MapReduce开发
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 伪分布式:HDFS和YARN 伪分 ...
- python 什么是位置参数?
位置参数是必选参数 ----不能不传, ----不能传一部分, ---必须按顺序传 ----必须传全部参数
- sql server 中后缀为.mdf的文件是干什么用的??
在微软的SQL Server 2000 数据库有三种类型的文件: 1)主要数据文件(扩展名.mdf是 primary data file 的缩写) 主要数据文件包含数据库的启动信息,并指向数据库中的其 ...