0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用TensorFlow写个简单的神经网络

lviY_AI_shequ 来源:未知 作者:邓佳佳 2018-03-23 15:37 次阅读

这次就用TensorFlow写个神经网络,这个神经网络写的很简单,就三种层,输入层--隐藏层----输出层;

首先导入我们要使用的包

# -*- coding: utf-8 -*-import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npimport matplotlibfrom sklearn import datasetsfrom matplotlib.font_manager import FontProperties

然后在设定一下我们画图的时候要显示中文的字体,因为Python自带的不支持中文的解释

#设置中文font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)zhfont1 = matplotlib.font_manager.FontProperties(fname=r'c:\windows\fonts\simsun.ttc')

定义一个会话,因为图是必须在会话中启动的

#定义一个图会话sess=tf.Session()

这里我选用公开的数据莺尾花的数据集,这个数据集虽然都被大家 玩烂了,不过这个是一个学习代码,就不计较那么多了;

#莺尾花数据集iris=datasets.load_iris()x_vals=np.array([x[0:3] for x in iris.data])y_vals=np.array([x[3] for x in iris.data])

这里设置一个随机种子,为了可以让大家把结果复现出来

#设置一个种子求结果seed=211tf.set_random_seed(seed)8np.random.seed(seed)

开始有模有样的划分数据集了,一个是训练集,一个是测试集,训练集占80%,测试集占20%

#划分测试机和训练集train_indices=np.random.choice(len(x_vals),round(len(x_vals)*0.8),replace=True)test_indices=np.array(list(set(range(len(x_vals)))-set(train_indices)))x_vals_train=x_vals[train_indices]x_vals_test = x_vals[test_indices]y_vals_train = y_vals[train_indices]y_vals_test = y_vals[test_indices]

在这里我们在将特征进行一个归一化,也就是将数值型特征全部都转换为0-1之间的数值,用特征最大距离作为分母;还有一些其他的标准化方法,有兴趣可以了解,这个好处就是能够让迭代更加快速,还有就是消除量纲,就是单位之间影响;

使用nan_to_num这个函数主要是为了消除None值带来的计算影响

#归一化函数def normalize_cols(m): col_max = m.max(axis=0) col_min = m.min(axis=0) return (m - col_min) / (col_max - col_min)#数据归一化并转空集x_vals_train=np.nan_to_num(normalize_cols(x_vals_train))x_vals_test=np.nan_to_num(normalize_cols(x_vals_test))

好了,上面已经生成了我们想要的数据集;在这里我们在设置一次训练的数据集多大,一般是选择2^N倍数,因为是计算机是二进制存储,这样就快,这里我就随意选择了个25,因为数据集比较小,没什么影响

batch_size=25

在这里定义一下训练变量Y和X,顺便设置为浮点类型

x_data=tf.placeholder(shape=[None,3],dtype=tf.float32)y_target=tf.placeholder(shape=[None,1],dtype=tf.float32)

在这里我们设置一下隐藏层连接数

#设置隐藏层hidden_layer_nodes=5

开始定义各层的参数变量,因为输入变量是三个

#定义各层变量,初始变量为3个A1=tf.Variable(tf.random_normal(shape=[3,hidden_layer_nodes]))b1=tf.Variable(tf.random_normal(shape=[hidden_layer_nodes]))A2=tf.Variable(tf.random_normal(shape=[hidden_layer_nodes,1]))b2=tf.Variable(tf.random_normal(shape=[1]))

这里我们使用relu函数作为激活函数,以及输出结果也使用relu函数

#定义隐藏层的输出和输出层的输出hidden_output=tf.nn.relu(tf.add(tf.matmul(x_data,A1),b1))final_output = tf.nn.relu(tf.add(tf.matmul(hidden_output, A2),b2))

这里我们在定义一下损失函数,有用最大似然估计的,这里我们使用均方误差方式

loss=tf.reduce_mean(tf.square(y_target-final_output))

定义一下参数的更新方式和学习速率,这里我们使用梯度下降方法更新,下一次我们讲解用其他方式更新,和学习速率随着迭代次数减少,tfboys就是那么任性

#声明算法初始变量opt=tf.train.GradientDescentOptimizer(0.005)train_step=opt.minimize(loss)#变量进行初始化init=tf.initialize_all_variables()sess.run(init)

定义两个list,用来存放在训练中的测试集和训练集的误差

#训练过程loss_vec=[]test_loss=[]

开始迭代,这里我们设置迭代次数为5000

for i in range(5000): #选取batch_size大小的数据集 rand_index=np.random.choice(len(x_vals_train),size=batch_size) #选取出数据集 rand_x=x_vals_train[rand_index] rand_y=np.transpose([y_vals_train[rand_index]]) #开始训练步骤 sess.run(train_step,feed_dict={x_data:rand_x,y_target:rand_y}) #保存损失结果 temp_loss=sess.run(loss,feed_dict={x_data:rand_x,y_target:rand_y}) #保存损失函数 loss_vec.append(np.sqrt(temp_loss)) test_temp_loss = sess.run(loss, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])}) test_loss.append(np.sqrt(test_temp_loss)) #打印损失函数,没五十次打印一次 if (i+1)%50==0: print('Generation: ' + str(i + 1) + '. Train_Loss = ' + str(temp_loss)+ '. test_Loss = ' + str(test_temp_loss))

迭代最后结果为

接下来我们在看看误差随着迭代变化的趋势,下降的还不够快,这些代码其实还是很粗糙,太多地方需要优化了;下次在写个优化版本的

#画图plt.plot(loss_vec, '', label='训练 Loss')plt.plot(test_loss, 'r--', label='测试 Loss')plt.title('均方误差分布', fontproperties=font)plt.xlabel('迭代步数', fontproperties=font)plt.ylabel('Loss')plt.legend(prop=zhfont1)plt.show()

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4771

    浏览量

    100723
  • 深度学习
    +关注

    关注

    73

    文章

    5500

    浏览量

    121118
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60530

原文标题:用TensorFlow写个简单的神经网络

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TF之CNN:Tensorflow构建卷积神经网络CNN的嘻嘻哈哈事之详细攻略

    TF之CNN:Tensorflow构建卷积神经网络CNN的嘻嘻哈哈事之详细攻略
    发表于 12-19 17:03

    【PYNQ-Z2试用体验】神经网络基础知识

    能在外界信息的基础上改变内部结构,是一种自适应系统,通俗的讲就是具备学习功能。现代神经网络是一种非线性统计性数据建模工具。简单来说,就是给定输入,神经网络经过一系列计算之后,输出最终结果。这好比人的大脑
    发表于 03-03 22:10

    【案例分享】ART神经网络与SOM神经网络

    元,它决定了该输入向量在地位空间中的位置。SOM神经网络训练的目的就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。SOM的训练过程其实很简单,就是接收到一个训练样本后,每个输出层
    发表于 07-21 04:30

    简单神经网络的实现

    简单神经网络
    发表于 09-11 11:57

    【AI学习】第3篇--人工神经网络

    `本篇主要介绍:人工神经网络的起源、简单神经网络模型、更多神经网络模型、机器学习的步骤:训练与预测、训练的两阶段:正向推演与反向传播、以Tensor
    发表于 11-05 17:48

    什么是LSTM神经网络

    简单理解LSTM神经网络
    发表于 01-28 07:16

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反向传播优化输入变量权重的层,以提高模型的预测
    发表于 07-12 08:02

    如何使用TensorFlow神经网络模型部署到移动或嵌入式设备上

    有很多方法可以将经过训练的神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    发表于 08-02 06:43

    如何使用Numpy搭建神经网络

    很多同学入门机器学习之后,直接TensorFlow调包实现神经网络,对于神经网络内在机理知之甚少。
    的头像 发表于 05-18 11:02 3598次阅读
    如何使用Numpy搭建<b class='flag-5'>神经网络</b>

    谷歌正式发布TensorFlow神经网络

    日前,我们很高兴发布了 TensorFlow神经网络 (Graph Neural Networks, GNNs),此库可以帮助开发者利用 TensorFlow 轻松处理图结构化数据。
    的头像 发表于 01-05 13:44 1484次阅读

    Python从头实现一个神经网络来理解神经网络的原理1

    有个事情可能会让初学者惊讶:神经网络模型并不复杂!『神经网络』这个词让人觉得很高大上,但实际上神经网络算法要比人们想象的简单。 这篇文章完全是为新手准备的。我们会通过
    的头像 发表于 02-27 15:05 690次阅读
    <b class='flag-5'>用</b>Python从头实现一个<b class='flag-5'>神经网络</b>来理解<b class='flag-5'>神经网络</b>的原理1

    Python从头实现一个神经网络来理解神经网络的原理2

    有个事情可能会让初学者惊讶:神经网络模型并不复杂!『神经网络』这个词让人觉得很高大上,但实际上神经网络算法要比人们想象的简单。 这篇文章完全是为新手准备的。我们会通过
    的头像 发表于 02-27 15:06 619次阅读
    <b class='flag-5'>用</b>Python从头实现一个<b class='flag-5'>神经网络</b>来理解<b class='flag-5'>神经网络</b>的原理2

    Python从头实现一个神经网络来理解神经网络的原理3

    有个事情可能会让初学者惊讶:神经网络模型并不复杂!『神经网络』这个词让人觉得很高大上,但实际上神经网络算法要比人们想象的简单。 这篇文章完全是为新手准备的。我们会通过
    的头像 发表于 02-27 15:06 726次阅读
    <b class='flag-5'>用</b>Python从头实现一个<b class='flag-5'>神经网络</b>来理解<b class='flag-5'>神经网络</b>的原理3

    Python从头实现一个神经网络来理解神经网络的原理4

    有个事情可能会让初学者惊讶:神经网络模型并不复杂!『神经网络』这个词让人觉得很高大上,但实际上神经网络算法要比人们想象的简单。 这篇文章完全是为新手准备的。我们会通过
    的头像 发表于 02-27 15:06 683次阅读
    <b class='flag-5'>用</b>Python从头实现一个<b class='flag-5'>神经网络</b>来理解<b class='flag-5'>神经网络</b>的原理4

    使用TensorFlow进行神经网络模型更新

    使用TensorFlow进行神经网络模型的更新是一个涉及多个步骤的过程,包括模型定义、训练、评估以及根据新数据或需求进行模型微调(Fine-tuning)或重新训练。下面我将详细阐述这个过程,并附上相应的TensorFlow代码
    的头像 发表于 07-12 11:51 398次阅读