IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【Tensorflow 复习2】使用Tensorflow建造神经网络 -> 正文阅读

[人工智能]【Tensorflow 复习2】使用Tensorflow建造神经网络

一、Tensorflow建造神经网络

在这里插入图片描述

添加一层神经元的函数

def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights = tf.Variable(tf.random.rand([in_size, out_size]))  # 定义权重
    biases = tf.Variable(tf.zeros([1,in_size])+0.1) # 定义偏置
    Wx_plus_b = tf.matmul(inputs,Weights)+biases    # 计算Σ

    # 激活函数选择
    if activation_function is None:    
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)

    return outputs

1. 定义数据 — 输入层

构建所需的数据。 这里的 x_data 和 y_data 并不是严格的一元二次函数的关系,因为多加了一个noise,这样看起来会更像真实情况。

x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]
noise = np.random.rand(0,0.05,x_data.shape).astype(np.float32) #产生部分噪点
y_data = np.square(x_data)+noise

利用占位符定义我们所需的神经网络的输入。 tf.placeholder()就是代表占位符,这里的None代表无论输入有多少都可以,因为输入只有一个特征,所以这里是1。

xs = tf.placeholder(tf.float32,[None,1]) #便于后续模拟时填充数据
ys = tf.placeholder(tf.float32,[None,1])

接下来,我们就可以开始定义神经层了。 通常神经层都包括输入层、隐藏层和输出层。这里的输入层只有一个属性, 所以我们就只有一个输入;隐藏层我们可以自己假设,这里我们假设隐藏层有10个神经元; 输出层和输入层的结构是一样的,所以我们的输出层也是只有一层。 所以,我们构建的是——输入层1个、隐藏层10个、输出层1个的神经网络。

2. 创建隐藏层和输出层

开始定义隐藏层,利用之前的 add_layer() 函数,这里使用 Tensorflow 自带的激励函数 tf.nn.relu

l1 = add_layer(xs,1,10,activation_function=tf.nn.relu) #从输入层(x_data)到隐藏层(l1)

定义输出层。此时的输入就是隐藏层的输出——l1,输入有10层(隐藏层的输出层),输出有1层

prediction = add_layer(l1,10,1,activation_function=None) #从隐藏层(l1)到输出层(prediction)

3. 误差计算

计算预测值prediction和真实值的误差,对二者差的平方求和再取平均。

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction) , reduction_indices=[1]))

4. 误差传播

是很关键的一步,如何让机器学习提升它的准确率。tf.train.GradientDescentOptimizer()中的值通常都小于1,这里取的是0.1,代表以0.1的效率来最小化误差loss

train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

5. 参数初始化

使用变量时,都要对它进行初始化,这是必不可少的。

init = tf.gloal_variables_initializer()

6. 开始模拟

定义Session,并用 Session 来执行 init 初始化步骤。 (注意:在tensorflow中,只有session.run()才会执行我们定义的运算。)

with tf.Session as sess:
    for i in range(1000):
        sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

7. 完整代码

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt #用于可视化
#import os
#os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#tf.compat.v1.disable_eager_execution()

def add_layer(inputs,in_size,out_size,activation_function=None):
    Weights = tf.Variable(tf.random.rand([in_size, out_size]))  # 定义权重
    biases = tf.Variable(tf.zeros([1,in_size])+0.1) # 定义偏置
    Wx_plus_b = tf.matmul(inputs,Weights)+biases    # 计算Σ

    # 激活函数选择
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        outputs = activation_function(Wx_plus_b)

    return outputs
    
# 初始化数据
x_data = np.linspace(-1,1,300,dtype=np.float32)[:,np.newaxis]
noise = np.random.rand(0,0.05,x_data.shape).astype(np.float32)
y_data = np.square(x_data)+noise

xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])

# 从输入层到隐含层 ,从隐含层到输出层
l1 = add_layer(xs,1,10,activation_function=tf.nn.relu) #从输入层(x_data)到隐藏层(l1)
prediction = add_layer(l1,10,1,activation_function=None) #从隐藏层(l1)到输出层(prediction)

# 计算误差 和 传播误差
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction) , reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #优化误差

init = tf.gloal_variables_initializer()

# 画出散点图
fig = plt.figure() #创建一个画框
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data,y_data)
plt.ion() #使得可以动态画图,否则在一次plt.show之后,就会停止画图
plt.show()

# 开始使用 tf.Session 模拟
with tf.Session as sess:
    for i in range(1000):
        sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
        print(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,y_data}) # 获取本次最新训练的预测结果
        lines = ax.plot(x_data,prediction_value,'r-',lw=5)

二、【附录】

1. 关于reduction_indices

tf.reduce_sum等函数中,有一个reduction_indices参数,表示函数的处理维度。
在tf.reduce_sum等函数中,有一个reduction_indices参数,表示函数的处理维度。
在这里插入图片描述

2. 关于tf.nn.relu

线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元。
其定义如下图,在横坐标的右侧,ReLU函数为线性函数。在横坐标的左侧侧,ReLU函数为值为 0 。
在这里插入图片描述

因此,tf.nn.relu()函数的目的是,将输入小于0的值幅值为0,输入大于0的值不变。

代码测试结果如下:

import tensorflow as tf
 
a = tf.constant([-1.0, 2.0,-3.6])
with tf.Session() as sess:
    b = tf.nn.relu(a)
    print(sess.run(b))
    
#测试结果为:
#[0. 2. 0.]

3. 关于numpy.linspace()

numpy.linspace() 函数用于在线性空间中以均匀步长生成数字序列。

格式: array = numpy.linspace(start, end,num=num_points)将在start和end之间生成一个统一的序列,共有num_points个元素。

  • start -> Starting point (included) of the rangestart ->范围的起点(包括)
  • end -> Endpoint (included) of the rangeend ->范围的端点(包括)
  • num ->Total number of points in the sequencenum >序列中的总点数
    如果不想在序列计算中包括最后一点,则可以使用另一个关键字参数endpoint ,可以将其设置为False(默认为True )a = np.linspace(0.02, 2, 10, endpoint=False) 。

4. 关于tf.train.GradientDescentOptimizer().minimize()

1.tf.train.GradientDescentOptimizer().minimize()

其中的minimize可以拆为以下两个步骤:

  • ① 梯度计算
  • ② 将计算出来的梯度应用到变量的更新中
  • 拆开的好处是,可以对计算的梯度进行限制,防止梯度消失和爆炸

下一节:【使用Tensorboard 可视化神经网络】

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:02:47  更:2022-03-06 13:05:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:32:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码