AI - TensorFlow - 第一个神经网络(First Neural Network)
Hello world
# coding=utf-8
import tensorflow as tf
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' try:
tf.contrib.eager.enable_eager_execution()
print("TF imported with eager execution!")
except ValueError:
print("TF already imported with eager execution!") tensor = tf.constant('Hello, world!')
tensor_value = tensor.numpy()
print(tensor_value) # ### Eager Execution
# https://www.tensorflow.org/guide/eager?hl=zh-cn
# https://www.tensorflow.org/api_docs/python/tf/enable_eager_execution
# TensorFlow的“Eager Execution”是一个命令式、由运行定义的接口,一旦从 Python 被调用可立即执行操作;
# - 操作会返回具体的值,而不是构建以后再运行的计算图;
# - 能够轻松地开始使用TensorFlow和调试模型,并且还减少了样板代码;
# - 使得 TensorFlow 的入门变得更简单,也使得研发工作变得更直观;
运行结果:
TF imported with eager execution!
b'Hello, world!'
建造第一个神经网络
# coding=utf-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' # ### 添加神经层 def add_layer(inputs, in_size, out_size, activation_function=None): # 构造添加神经层的函数,这里设定默认激励函数为None
Weights = tf.Variable(tf.random_normal([in_size, out_size])) # 定义weights:为一个in_size行, out_size列的随机变量矩阵
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 定义biases:在机器学习中biases的推荐值不为0
Wx_plus_b = tf.matmul(inputs, Weights) + biases # 定义Wx_plus_b:神经网络未激活的值;tf.matmul()是矩阵的乘法
if activation_function is None: # 当激励函数为None时,输出当前的预测值Wx_plus_b
outputs = Wx_plus_b
else: # 不为None时,将Wx_plus_b传到activation_function()函数得到输出
outputs = activation_function(Wx_plus_b)
return outputs # 返回输出 # ### 构建数据
x_data = np.linspace(-1, 1, 300, dtype=np.float32)[:, np.newaxis] # 构建数据x_data
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) # 构建噪声数据noise,模拟真实情况
y_data = np.square(x_data) - 0.5 + noise # 构建数据y_data # ### 搭建网络
xs = tf.placeholder(tf.float32, [None, 1]) # 利用占位符定义神经网络的输入
ys = tf.placeholder(tf.float32, [None, 1]) # None代表无论输入有多少都可以,1表示输入只有一个特征
h1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # 定义隐藏层,10个神经元,激励函数使用TensorFlow自带的tf.nn.relu
prediction = add_layer(h1, 10, 1, activation_function=None) # 定义输出层(预测层),输出一个结果
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
reduction_indices=[1])) # 计算预测值prediction和真实值的误差,对二者差的平方求和再取平均
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 选择Optimizer来最小化误差loss,以0.1的效率
init = tf.global_variables_initializer() # 使用变量前,必须初始化
sess = tf.Session() # 定义Session
sess.run(init) # 执行init初始化步骤 # ### 结果可视化
fig = plt.figure() # 创建图形实例
ax = fig.add_subplot(1, 1, 1) # 创建子图,作为1行1列图形矩阵中的第1个subplot
ax.scatter(x_data, y_data) # 绘制散点图
plt.ion() # 打开交互模式
plt.show() # 显示图形 # ### 训练
for i in range(1000): # 学习次数1000
sess.run(train_step, feed_dict={xs: x_data, ys: y_data}) # 学习内容是train_step
if i % 50 == 0: # 每隔50次训练输出机器学习的误差和刷新一次图形
print("loss: {}".format(sess.run(loss, feed_dict={xs: x_data, ys: y_data})))
try:
ax.lines.remove(lines[0])
except Exception:
pass
prediction_value = sess.run(prediction, feed_dict={xs: x_data})
lines = ax.plot(x_data, prediction_value, 'r-', lw=5) # 用红色、宽度为5的线来显示预测数据和输入之间的关系
plt.pause(0.2) # 暂停0.2秒 # ### 添加神经层
# 通过在TensorFlow中定义一个添加层的函数,可以添加神经层;
# 神经层里常见的参数通常有weights、biases和激励函数等;
# 添加神经层的函数def add_layer()有四个参数:输入值、输入的大小、输出的大小和激励函数;
#
# ### 构建数据
# 模拟真实数据;
#
# ### 搭建网络
# 神经网络(输入层1个、隐藏层10个、输出层1个);
#
# ### 训练
# 机器学习的内容是train_step, 用Session来run每一次training的数据,逐步提升神经网络的预测准确性;
# 注意:当运算要用到placeholder时,就需要feed_dict这个字典来指定输入;
#
# ### 可视化
# 利用matplotlib模块绘制和显示图形;
某一次的运行过程中的图形显示:

某一次的命令行输出:
loss: 0.05769985169172287
loss: 0.007242309395223856
loss: 0.004746056627482176
loss: 0.004090217407792807
loss: 0.0037425532937049866
loss: 0.0035221632570028305
loss: 0.003357301466166973
loss: 0.0032187148462980986
loss: 0.0031040285248309374
loss: 0.0030171412508934736
loss: 0.0029463612008839846
loss: 0.002890094416216016
loss: 0.0028497371822595596
loss: 0.002820496214553714
loss: 0.0027967311907559633
loss: 0.002780070761218667
loss: 0.0027664629742503166
loss: 0.00275203469209373
loss: 0.002737578935921192
loss: 0.002723217708989978
AI - TensorFlow - 第一个神经网络(First Neural Network)的更多相关文章
- 递归神经网络(Recursive Neural Network, RNN)
信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...
- 卷积神经网络(Convolutional Neural Network, CNN)简析
目录 1 神经网络 2 卷积神经网络 2.1 局部感知 2.2 参数共享 2.3 多卷积核 2.4 Down-pooling 2.5 多层卷积 3 ImageNet-2010网络结构 4 DeepID ...
- 深度学习FPGA实现基础知识10(Deep Learning(深度学习)卷积神经网络(Convolutional Neural Network,CNN))
需求说明:深度学习FPGA实现知识储备 来自:http://blog.csdn.net/stdcoutzyx/article/details/41596663 说明:图文并茂,言简意赅. 自今年七月份 ...
- 人工神经网络 Artificial Neural Network
2017-12-18 23:42:33 一.什么是深度学习 深度学习(deep neural network)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高 ...
- Tensorflow - Implement for a Convolutional Neural Network on MNIST.
Coding according to TensorFlow 官方文档中文版 中文注释源于:tf.truncated_normal与tf.random_normal TF-卷积函数 tf.nn.con ...
- [C4] 前馈神经网络(Feedforward Neural Network)
前馈神经网络(Feedforward Neural Network - BP) 常见的前馈神经网络 感知器网络 感知器(又叫感知机)是最简单的前馈网络,它主要用于模式分类,也可用在基于模式分类的学习控 ...
- 详解循环神经网络(Recurrent Neural Network)
本文结构: 模型 训练算法 基于 RNN 的语言模型例子 代码实现 1. 模型 和全连接网络的区别 更细致到向量级的连接图 为什么循环神经网络可以往前看任意多个输入值 循环神经网络种类繁多,今天只看最 ...
- 脉冲神经网络Spiking neural network
(原文地址:维基百科) 简单介绍: 脉冲神经网络Spiking neuralnetworks (SNNs)是第三代神经网络模型,其模拟神经元更加接近实际,除此之外,把时间信息的影响也考虑当中.思路是这 ...
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
随机推荐
- 区分getchar(),getch(),getche()三个函数:
区分getchar(),getch(),getche()三个函数: 第一行是手动输入的,第二行是printf输出的. getch()和getche()这两个函数使用时要包含conio.h头文件: ge ...
- 19.最省钱的app发短信方法
在创业团队中,一个重要的原则是能省就省,该花就花,把银子用在刀刃上. 现在的app,为了获取用户的社交关系,需要用户的手机号注册.用手机号注册就涉及到一个发送短信验证码的问题,那怎么才能在短信服务上投 ...
- 8.app后端和web后端的区别
很多从web后端转到app后端的小伙伴经常很茫然,不知道这两者之间有啥区别.本文通过例子,分析web后端和app后端的区别,使各位更好地把握app后端的架构. (1) app后端要慎重考虑网络传输的流 ...
- 玩转spring MVC(七)----拦截器
继续在前边的基础上来学习spring MVC中拦截器的使用,下面通过一个例子来实现(完整项目在这里下载:http://download.csdn.net/detail/u012116457/84334 ...
- IE8中marquee不显示出滚动效果的解决办法
随着各种软件的升级,我们系统中的IE6也渐渐被淘汰了,目前主流的浏览器一半的用户已经从IE6直接升级到了IE8,虽然给用户更好的体验,上网更快更方便了,但是对网站制作来说,又是个比较麻烦的问题,因为很 ...
- kmspico_setup.exe运行提示系统资源不足,无法完成请求的服务
在使用KMSpico激活office时,windows下运行exe会提示系统资源不足,无法完成请求的服务. 我的解决方法是:卸载电脑上的wps...
- 【已解决】通过Package或者Package+Activity启动应用
有时很烦人,打开要启动的apk,通过adb命令(adb shell "dumpsys activity |grep Focuse") 获取到的应用包名 无法使用adb命令(adb ...
- 【重学计算机】操作系统D4章:设备管理
1. IO的控制方式 演进过程:轮询 --> 中断 --> DMA --> IO通道 经典布局:南北桥 PS:详见<计算机组成原理> 2. IO的实现 软件实现层次:硬件 ...
- 基于Unity的AR开发初探:发布AR应用到Android平台
本文接上一篇,介绍一下如何通过Unity发布第一个AR应用至Android平台,在Android手机上使用我们的第一个AR应用. 一.一些准备工作 1.1 准备Java JDK 这里选择的是JDK 1 ...
- Python爬虫入门教程 59-100 python爬虫高级技术之验证码篇5-极验证识别技术之二
图片比对 昨天的博客已经将图片存储到了本地,今天要做的第一件事情,就是需要在两张图片中进行比对,将图片缺口定位出来 缺口图片 完整图片 计算缺口坐标 对比两张图片的所有RBG像素点,得到不一样像素点的 ...