正文共5873个字,3张图,预计阅读时间15分钟 。

任务:

使用tensorflow训练一个神经网络作为分类器,分类的数据点如下:

螺旋形数据点

原理

数据点一共有三个类别,而且是螺旋形交织在一起,显然是线性不可分的,需要一个非线性的分类器。这里选择神经网络。

输入的数据点是二维的,因此每个点只有x,y坐标这个原始特征。这里设计的神经网络有两个隐藏层,每层有50个神经元,足够抓住数据点的高维特征(实际上每层10个都够用了)。最后输出层是一个逻辑回归,根据隐藏层计算出的50个特征来预测数据点的分类(红、黄、蓝)。

一般训练数据多的话,应该用随机梯度下降来训练神经网络,这里训练数据较少(300),就直接批量梯度下降了。

# 导入包、初始化

import numpy as np

import matplotlib.pyplot as plt

import tensorflow as tf %matplotlib inline plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots

plt.rcParams['image.interpolation'] = 'nearest'

plt.rcParams['image.cmap'] = 'gray

'# 生成螺旋形的线形不可分数据点

np.random.seed(0) N = 100 # 每个类的数据个数

D = 2 # 输入维度

K = 3 # 类的个数

X = np.zeros((N*K,D)) num_train_examples = X.shape[0] y = np.zeros(N*K, dtype='uint8')

for j in xrange(K):  ix = range(N*j,N*(j+1))  r = np.linspace(0.0,1,N) # radius  t = np.linspace(j*4,(j+1)*4,N) + np.random.randn(N)*0.2 # theta  X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]  y[ix] = j fig = plt.figure() plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral) plt.xlim([-1,1]) plt.ylim([-1,1])

螺旋形数据点

打印输出输入X和label的shape

num_label = 3

labels = (np.arange(num_label) == y[:,None]).astype(np.float32) labels.shape

(300, 3)

X.shape

(300, 2)

用tensorflow构建神经网络

import math N = 100 # 每个类的数据个数

D = 2 # 输入维度

num_label = 3 # 类的个数

num_data = N * num_label hidden_size_1 = 50

hidden_size_2 = 50

beta = 0.001 # L2 正则化系数

learning_rate = 0.1 # 学习速率

labels = (np.arange(num_label) == y[:,None]).astype(np.float32) graph = tf.Graph()

with graph.as_default():    x = tf.constant(X.astype(np.float32))    tf_labels = tf.constant(labels)        # 隐藏层1    hidden_layer_weights_1 = tf.Variable(    tf.truncated_normal([D, hidden_size_1], stddev=math.sqrt(2.0/num_data)))    hidden_layer_bias_1 = tf.Variable(tf.zeros([hidden_size_1]))        # 隐藏层2    hidden_layer_weights_2 = tf.Variable(    tf.truncated_normal([hidden_size_1, hidden_size_2], stddev=math.sqrt(2.0/hidden_size_1)))    hidden_layer_bias_2 = tf.Variable(tf.zeros([hidden_size_2]))        # 输出层    out_weights = tf.Variable(    tf.truncated_normal([hidden_size_2, num_label], stddev=math.sqrt(2.0/hidden_size_2)))    out_bias = tf.Variable(tf.zeros([num_label]))        z1 = tf.matmul(x, hidden_layer_weights_1) + hidden_layer_bias_1    h1 = tf.nn.relu(z1)        z2 = tf.matmul(h1, hidden_layer_weights_2) + hidden_layer_bias_2    h2 = tf.nn.relu(z2)        logits = tf.matmul(h2, out_weights) + out_bias        # L2正则化    regularization = tf.nn.l2_loss(hidden_layer_weights_1) + tf.nn.l2_loss(hidden_layer_weights_2) + tf.nn.l2_loss(out_weights)    loss = tf.reduce_mean(        tf.nn.softmax_cross_entropy_with_logits(labels=tf_labels, logits=logits) + beta * regularization)        optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)        train_prediction = tf.nn.softmax(logits)    weights = [hidden_layer_weights_1, hidden_layer_bias_1, hidden_layer_weights_2, hidden_layer_bias_2, out_weights, out_bias]

上一步相当于搭建了神经网络的骨架,现在需要训练。每1000步训练,打印交叉熵损失和正确率。

num_steps = 50000

def accuracy(predictions, labels):    return (100.0 * np.sum(np.argmax(predictions, 1) == np.argmax(labels, 1))          / predictions.shape[0])def relu(x):    return np.maximum(0,x)

with tf.Session(graph=graph) as session:    tf.global_variables_initializer().run()    print('Initialized')

for step in range(num_steps):        _, l, predictions = session.run([optimizer, loss, train_prediction])            if (step % 1000 == 0):            print('Loss at step %d: %f' % (step, l))            print('Training accuracy: %.1f%%' % accuracy(                predictions, labels))            w1, b1, w2, b2, w3, b3 = weights

# 显示分类器    h = 0.02    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),                         np.arange(y_min, y_max, h))    Z = np.dot(relu(np.dot(relu(np.dot(np.c_[xx.ravel(), yy.ravel()], w1.eval()) + b1.eval()), w2.eval()) + b2.eval()), w3.eval()) + b3.eval()    Z = np.argmax(Z, axis=1)    Z = Z.reshape(xx.shape)    fig = plt.figure()    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8)    plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral)    plt.xlim(xx.min(), xx.max())    plt.ylim(yy.min(), yy.max())

Initialized

Loss at step 0: 1.132545

Training accuracy: 43.7%

Loss at step 1000: 0.257016

Training accuracy: 94.0%

Loss at step 2000: 0.165511

Training accuracy: 98.0%

Loss at step 3000: 0.149266

Training accuracy: 99.0%

Loss at step 4000: 0.142311

Training accuracy: 99.3%

Loss at step 5000: 0.137762

Training accuracy: 99.3%

Loss at step 6000: 0.134356

Training accuracy: 99.3%

Loss at step 7000: 0.131588

Training accuracy: 99.3%

Loss at step 8000: 0.129299

Training accuracy: 99.3%

Loss at step 9000: 0.127340

Training accuracy: 99.3%

Loss at step 10000: 0.125686

Training accuracy: 99.3%

Loss at step 11000: 0.124293

Training accuracy: 99.3%

Loss at step 12000: 0.123130

Training accuracy: 99.3%

Loss at step 13000: 0.122149

Training accuracy: 99.3%

Loss at step 14000: 0.121309

Training accuracy: 99.3%

Loss at step 15000: 0.120542

Training accuracy: 99.3%

Loss at step 16000: 0.119895

Training accuracy: 99.3%

Loss at step 17000: 0.119335

Training accuracy: 99.3%

Loss at step 18000: 0.118836

Training accuracy: 99.3%

Loss at step 19000: 0.118376

Training accuracy: 99.3%

Loss at step 20000: 0.117974

Training accuracy: 99.3%

Loss at step 21000: 0.117601

Training accuracy: 99.3%

Loss at step 22000: 0.117253

Training accuracy: 99.3%

Loss at step 23000: 0.116887

Training accuracy: 99.3%

Loss at step 24000: 0.116561

Training accuracy: 99.3%

Loss at step 25000: 0.116265

Training accuracy: 99.3%

Loss at step 26000: 0.115995

Training accuracy: 99.3%

Loss at step 27000: 0.115750

Training accuracy: 99.3%

Loss at step 28000: 0.115521

Training accuracy: 99.3%

Loss at step 29000: 0.115310

Training accuracy: 99.3%

Loss at step 30000: 0.115111

Training accuracy: 99.3%

Loss at step 31000: 0.114922

Training accuracy: 99.3%

Loss at step 32000: 0.114743

Training accuracy: 99.3%

Loss at step 33000: 0.114567

Training accuracy: 99.3%

Loss at step 34000: 0.114401

Training accuracy: 99.3%

Loss at step 35000: 0.114242

Training accuracy: 99.3%

Loss at step 36000: 0.114086

Training accuracy: 99.3%

Loss at step 37000: 0.113933

Training accuracy: 99.3%

Loss at step 38000: 0.113785

Training accuracy: 99.3%

Loss at step 39000: 0.113644

Training accuracy: 99.3%

Loss at step 40000: 0.113504

Training accuracy: 99.3%

Loss at step 41000: 0.113366

Training accuracy: 99.3%

Loss at step 42000: 0.113229

Training accuracy: 99.3%

Loss at step 43000: 0.113096

Training accuracy: 99.3%

Loss at step 44000: 0.112966

Training accuracy: 99.3%

Loss at step 45000: 0.112838

Training accuracy: 99.3%

Loss at step 46000: 0.112711

Training accuracy: 99.3%

Loss at step 47000: 0.112590

Training accuracy: 99.3%

Loss at step 48000: 0.112472

Training accuracy: 99.3%

Loss at step 49000: 0.112358

Training accuracy: 99.3%

分类器.png

原文链接:https://www.jianshu.com/p/25a709c70ae3

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看


LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

Tensorflow实践:用神经网络训练分类器相关推荐

  1. 关于Tensorflow用于深度神经网络训练中的一些问题

    小弟刚接触tensorflow,之前在一篇文章中看到一个用于DNN神经网络预测,想尝试对该代码进行一点修改.原文:https://blog.csdn.net/xxzhangx/article/deta ...

  2. 建立简单的卷积神经网络训练分类器,识别九宫格、四宫格等图片

    本文想实现一个分类器模型,该模型能够识别出九宫格图片并将图片进行切割,首先我要构造训练集,也就是自己生成一些九宫格图片. 其中r=3表示将其切割为3行,c=3表示将其切割为3列.你也可以生成4宫格图片 ...

  3. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十二)(人工神经网络(1)))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十二)(人工神经网络(1))) 12 人工神经网络(1) 12.1 神经元与感知机 12.1.1 感知机 12.1.2 Delt ...

  4. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...

  5. 训练softmax分类器实例_知识蒸馏:如何用一个神经网络训练另一个神经网络

    作者:Tivadar Danka 编译:ronghuaiyang 原文链接 知识蒸馏:如何用一个神经网络训练另一个神经网络​mp.weixin.qq.com 导读 知识蒸馏的简单介绍,让大家了解知识蒸 ...

  6. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...

  7. 美团图神经网络训练框架的实践和探索

    美团搜索与NLP团队在图神经网络的长期落地实践中,基于业务实际场景,自主设计研发了图神经网络框架Tulong,以及配套的图学习平台,提升了模型的规模和迭代效率.本文介绍了模型归纳抽象.基本框架.性能优 ...

  8. python神经网络原理pdf_《深度学习原理与 TensorFlow实践》高清完整PDF版 下载

    1.封面介绍 2.出版时间 2019年7月 3.推荐理由 本书介绍了深度学习原理与TensorFlow实践.着重讲述了当前学术界和工业界的深度学习核心知识:机器学习概论.神经网络.深度学习.着重讲述了 ...

  9. CNN卷积神经网络—LeNet原理以及tensorflow实现mnist手写体训练

    CNN卷积神经网络-LeNet原理以及tensorflow实现minst手写体训练 1. LeNet原理 2.tensorflow实现Mnist手写体识别 1.安装tensorflow 2.代码实现手 ...

最新文章

  1. 基于Struts2框架的名片管理系统
  2. 2018.90.20列表
  3. 弱类型语言的优势:C#的委托概念在Javascript中的实现
  4. 【控制】二阶 UGV 的无穷时间状态输入性能最优解算
  5. 互联网1分钟 | 1011
  6. 信息学奥赛一本通(1399:甲流病人初筛)
  7. ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl...
  8. Sybase数据库连接配置
  9. zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
  10. yolo v4模型训练过程(超详细)
  11. AndroidTV开发12——大屏TV电视及盒子Apk远程安装说明文档
  12. 怎么制作真人qq秀_NBA赛事最震撼的开场秀
  13. Ubuntu 20.04安装微信,QQ,TIM
  14. RP产品原型资源分享-PRD文档
  15. 纯html+css写一个收款收据或者发票样式
  16. SWAT入门小问题的解决
  17. TestOpenWriter
  18. .NET周报【11月第4期 2022-11-30】
  19. stata学习笔记|OLS回归
  20. 用Java程序模拟实现新冠病毒传染

热门文章

  1. jaxb java xml序列化_XML编程总结(六)——使用JAXB进行java对象和xml格式之间的相互转换...
  2. java信号灯_java 信号灯 Semaphore
  3. java web 通过servlet访问web_inf jsp跳转_WEB-INF下的jsp通过servlet中超链接跳转
  4. jquery 当页面图片加载之后_图片的懒加载和预加载
  5. php数据库连接程序,常用的数据库连接程序
  6. java11 scala_JDK1.10+scala环境的搭建之windows环境
  7. matlab直方图显示,控制分类直方图的显示
  8. 牛客网多校联合训练1 J Different Integers(可持久化线段树/莫队)
  9. 二、Zabbix-zabbix server部署-LNMP
  10. 全局变量、局部变量、静态全局变量、静态局部变量的区别