目标是学习\(y=2x+3\)

建立一个5层的神经网络,用平方误差作为损失函数。

代码如下:

import tensorflow as tf
import numpy as np
import time x_size=200000
dim=2
x_data=np.random.random([x_size,dim]).astype('float32')
y_data=2*x_data+3
x_test=np.random.random([10,dim]).astype('float32')
y_test=2*x_test+3 train_x=tf.placeholder(tf.float32,shape=[None,dim])
train_y=tf.placeholder(tf.float32,shape=[None,dim]) weight1=tf.Variable(tf.truncated_normal([dim,40],stddev=0.1))
b1=tf.Variable(tf.zeros([40])+0.1)
h1=tf.nn.relu(tf.matmul(train_x,weight1)+b1) weight2=tf.Variable(tf.truncated_normal([40,40],stddev=0.1))
b2=tf.Variable(tf.zeros([40])+0.1)
h2=tf.nn.relu(tf.matmul(h1,weight2)+b2) weight3=tf.Variable(tf.truncated_normal([40,40],stddev=0.1))
b3=tf.Variable(tf.zeros([40])+0.1)
h3=tf.nn.relu(tf.matmul(h2,weight3)+b3) weight4=tf.Variable(tf.truncated_normal([40,40],stddev=0.1))
b4=tf.Variable(tf.zeros([40])+0.1)
h4=tf.nn.relu(tf.matmul(h3,weight4)+b4) weight5=tf.Variable(tf.truncated_normal([40,dim],stddev=0.1))
b5=tf.Variable(tf.zeros([dim])+0.1)
y_output=tf.nn.relu(tf.matmul(h4,weight5)+b5) loss=tf.reduce_mean(tf.square(train_y-y_output))
optimizer=tf.train.GradientDescentOptimizer(0.5)
train_step=optimizer.minimize(loss) t1=time.time()
sess=tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(2000):
feed_train={
train_x:x_data,
train_y:y_data
}
if i%100==0:
print('loss:',sess.run(loss,feed_dict=feed_train),end=', ')
sess.run(train_step,feed_dict=feed_train)
print()
t2=time.time()
print('Total Time:',t2-t1)
print('test')
for i in range(10):
feed_test={train_x:x_test[i:i+1],train_y:y_test[i:i+1]}
print('y: ',sess.run(train_y,feed_dict=feed_test))
print('y_output:',sess.run(y_output,feed_dict=feed_test))
print('loss:',sess.run(loss,feed_dict=feed_test))
sess.close()

结果:

loss: 15.4106,   loss: 0.232037,   loss: 0.211914,   loss: 0.198133,   loss: 0.0544874,   loss: 0.0280089,   loss: 0.0211618,   loss: 0.0173591,   loss: 0.0109964,   loss: 0.00902615,   loss: 0.00815686,   loss: 0.00941989,   loss: 0.00619169,   loss: 0.00529554,   loss: 0.00506653,   loss: 0.00660528,   loss: 0.00382864,   loss: 0.00412649,   loss: 0.00610038,   loss: 0.00354737,
Total Time: 88.89598035812378
test
y: [[ 4.46494102 4.53034449]]
y_output: [[ 4.48269606 4.44468594]]
loss: 0.00382631
y: [[ 3.21122026 4.36406898]]
y_output: [[ 3.22117805 4.2706871 ]]
loss: 0.00440967
y: [[ 3.58840036 4.41665506]]
y_output: [[ 3.59200501 4.3375597 ]]
loss: 0.00313453
y: [[ 3.49797821 4.21883869]]
y_output: [[ 3.51356149 4.14429617]]
loss: 0.00289971
y: [[ 3.75655651 4.35610151]]
y_output: [[ 3.76163697 4.26597834]]
loss: 0.004074
y: [[ 4.52173853 4.32090807]]
y_output: [[ 4.53192806 4.2343545 ]]
loss: 0.00379767
y: [[ 4.19067335 4.8417387 ]]
y_output: [[ 4.20001888 4.73385048]]
loss: 0.0058636
y: [[ 4.58287668 3.89965653]]
y_output: [[ 4.59979439 3.84099913]]
loss: 0.00186345
y: [[ 4.25389147 3.75640154]]
y_output: [[ 4.23791742 3.69044876]]
loss: 0.00230247
y: [[ 3.40870714 4.49888897]]
y_output: [[ 3.41926885 4.42829704]]
loss: 0.00254738

可以看出在训练集上loss不断减小,最后下降到0.00354737,而在测试集上loss也在0.003左右。

由于参数是随机设置的,有时候可能陷入局部最优中,多运行几次可以减少陷入局部最优的概率。

将优化算法换成:

optimizer=tf.train.AdamOptimizer()

后的结果:

loss: 15.6427,   loss: 0.197051,   loss: 0.174776,   loss: 0.164641,   loss: 0.15766,   loss: 0.131154,   loss: 0.0029341,   loss: 0.000404288,   loss: 0.000178629,   loss: 9.63827e-05,   loss: 5.74653e-05,   loss: 3.65505e-05,   loss: 2.44332e-05,   loss: 1.69916e-05,   loss: 1.22397e-05,   loss: 9.06447e-06,   loss: 6.86902e-06,   loss: 5.31113e-06,   loss: 4.16228e-06,   loss: 3.30907e-06,
Total Time: 89.90041589736938
test
y: [[ 4.46494102 4.53034449]]
y_output: [[ 4.46485758 4.53046322]]
loss: 1.05304e-08
y: [[ 3.21122026 4.36406898]]
y_output: [[ 3.21072125 4.36450434]]
loss: 2.19271e-07
y: [[ 3.58840036 4.41665506]]
y_output: [[ 3.58802533 4.41699553]]
loss: 1.28282e-07
y: [[ 3.49797821 4.21883869]]
y_output: [[ 3.49763799 4.2191186 ]]
loss: 9.70489e-08
y: [[ 3.75655651 4.35610151]]
y_output: [[ 3.75626636 4.35636234]]
loss: 7.61112e-08
y: [[ 4.52173853 4.32090807]]
y_output: [[ 4.52174997 4.32091379]]
loss: 8.18545e-11
y: [[ 4.19067335 4.8417387 ]]
y_output: [[ 4.19037819 4.84208441]]
loss: 1.03317e-07
y: [[ 4.58287668 3.89965653]]
y_output: [[ 4.58305788 3.89945245]]
loss: 3.7242e-08
y: [[ 4.25389147 3.75640154]]
y_output: [[ 4.25399828 3.75623488]]
loss: 1.95912e-08
y: [[ 3.40870714 4.49888897]]
y_output: [[ 3.40823555 4.49932337]]
loss: 2.05551e-07
使用RMSPropOptimizer,最小loss:0.33
使用FtrlOptimizer,最小loss:0.17
使用MomentumOptimizer(learning_rate=0.1,momentum=0.6),loss:4.47119e-06, 但是不是很稳定。

用tensorflow构建神经网络学习简单函数的更多相关文章

  1. 使用 Visual Studio 2015 + Python3.6 + tensorflow 构建神经网络时报错:'utf-8' codec can't decode byte 0xcc in position 78: invalid continuation byte

    使用 Visual Studio 2015 + Python3.6 + tensorflow 构建神经网络时报错:'utf-8' codec can't decode byte 0xcc in pos ...

  2. 在R中使用Keras和TensorFlow构建深度学习模型

    一.以TensorFlow为后端的Keras框架安装 #首先在ubuntu16.04中运行以下代码 sudo apt-get install libcurl4-openssl-dev libssl-d ...

  3. Tensorflow递归神经网络学习练习

    import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data #载入数据集mnist = inpu ...

  4. 【零基础】使用Tensorflow实现神经网络

    一.序言 前面已经逐步从单神经元慢慢“爬”到了神经网络并把常见的优化都逐个解析了,再往前走就是一些实际应用问题,所以在开始实际应用之前还得把“框架”翻出来,因为后面要做的工作需要我们将精力集中在业务而 ...

  5. kaggle赛题Digit Recognizer:利用TensorFlow搭建神经网络(附上K邻近算法模型预测)

    一.前言 kaggle上有传统的手写数字识别mnist的赛题,通过分类算法,将图片数据进行识别.mnist数据集里面,包含了42000张手写数字0到9的图片,每张图片为28*28=784的像素,所以整 ...

  6. TensorFlow构建卷积神经网络/模型保存与加载/正则化

    TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...

  7. 深度学习之TensorFlow构建神经网络层

    深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...

  8. tensorflow中使用mnist数据集训练全连接神经网络-学习笔记

    tensorflow中使用mnist数据集训练全连接神经网络 ——学习曹健老师“人工智能实践:tensorflow笔记”的学习笔记, 感谢曹老师 前期准备:mnist数据集下载,并存入data目录: ...

  9. Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络

    Batch Normalization: 使用tf.layers高级函数来构建神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearningai课程 课程笔 ...

随机推荐

  1. 27.python中excel处理库openpyxl使用详解

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 ? 1 2 3 from openpyxl ...

  2. 18.Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了.当 ...

  3. MySQL 持久化保障机制-redo 日志

    我们在 聊一聊 MySQL 中的事务及其实现原理 中提到了 redo 日志,redo 日志是用来保证 MySQL 持久化功能的,需要注意的是 redo 日志是 InnoDB 引擎特有的功能. 为什么 ...

  4. matlab写入excel数据

    使用xlswrite 可以help xlswrite查看用法 xlswrite(filename,A)xlswrite(filename,A,sheet)xlswrite(filename,A,xlR ...

  5. 【原创】快速失败机制&失败安全机制

    这是why技术的第29篇原创文章 之前在写<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章时,我在8.1小节提到了快速失败和失败安全机制. 但是我发现当我搜索" ...

  6. Java Math类(java.lang包)

    Math类包含用于执行基本数学运算的方法,其所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round(); 运行结果:

  7. OOP之重载

    PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的. 属性的重载通过调用类中的__set,__get,__isset,__unset方法来分别实现对不存在属性的赋值.读取.判断属性是否设 ...

  8. ubuntu pycharm、idea创建快捷方式

    编辑/usr/share/application/pycharm.desktop [Desktop Entry] Type=Application Name=Pycharm GenericName=P ...

  9. 关于yarn安装,这里做一个备份

    安装的是window版本,官网上有三种安装方式. 第一种下载一个.msi的安装包,然后当它运行时会指引你将 Yarn 安装到 Windows 上,因为点开以后页面是404,所以没有用这种方法. 第二种 ...

  10. iOS使用fastlane自动化打包到fir(最全最详细流程)

    # iOS使用fastlane自动化打包到fir(最全最详细流程)1. **首先确认是否安装了ruby,终端查看下ruby版本**> ruby -v终端输出:ruby 2.4.1p111 (20 ...