基于Tensorflow搭建一个神经网络的实现

文章目录

  • 什么是TensorFlow
  • 选择 TensorFlow 的原因
  • TensorFlow核心概念
  • TensorFlow学习导图
  • TensorFlow实例一
    • 打印helloworld程序
  • TensorFlow实例二
    • session的使用
  • TensorFlow实例三
    • Variable的使用
  • TensorFlow实例四
    • 占位符(Placeholder)使用
  • TensorFlow实例五
    • 基于Tensorflow搭建一个神经网络的实现


什么是TensorFlow

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。2015年它由Google发布并宣布开源。它的名字来源于本身的工作原理,Tensor(张量)意味着一个N维的数组,Flow(流)就是流动。Tensorflow的运行过程就是张量在数据流图中流动的过程。

选择 TensorFlow 的原因

TensorFlow 是一个端到端开源机器学习平台。它拥有一个包含各种工具、库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的发展,并让开发者轻松地构建和部署由机器学习提供支持的应用

TensorFlow核心概念

  • 图(Graph):图描述了计算的过程,TensorFlow使用图来表示计算任务。
  • 张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor就是一个多维的数组。
  • 操作(op):operation的缩写,一个op就是某节点上的一个操作,输入0个或多个Tensor,执行计算,产生输出0个或多个Tensor。
  • 会话(Session):图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或GPU之类的设备上执行。
  • 变量(Variable):运行过程中可以被改变,用于维护状态。

TensorFlow学习导图

基于Tensorflow搭建一个神经网络的实现_第1张图片

TensorFlow实例一

打印helloworld程序

# 引入tensorflow库
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
# 创建一个操作(常量)
a = tf.constant('Hello world!')
# 启动会话(Session)
sess = tf.Session()
# 运行Graph
print(sess.run(a))
# 关闭会话
sess.close()

在这里插入图片描述

TensorFlow实例二

session的使用

# 引入tensorflow库
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
#第一阶段: 构建图
#定义一个1x2的矩阵,矩阵元素为[3 3]
matrix1 = tf.constant([[3., 3.]])

#定义一个2x1的矩阵,矩阵元素为[22]
matrix2 = tf.constant([[2.],[2.]])

# 创建一个矩阵乘法 matmul op ,'matrix1''matrix2' 作为输入.
product = tf.matmul(matrix1, matrix2)

#第二阶段: 执行图
with tf.Session() as sess:
    print ("matrix1: %s" % sess.run(matrix1))
    print ("matrix2: %s" % sess.run(matrix2))
    print ("result type: %s" % type(sess.run(product)))
    print ("result: %s" % sess.run(product))

基于Tensorflow搭建一个神经网络的实现_第2张图片

TensorFlow实例三

Variable的使用

import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
state = tf.Variable(0, name='counter')  # 定义变量state,并赋值0,名字counter
# print(state.name)
one = tf.constant(1) # 定义常量one,赋值1
new_value = tf.add(state, one) # 变量 + 常量 = 变量
# 将state用new_value代替
updata = tf.assign(state, new_value) # 把new_value加1的值赋值给state

# 变量激活
init = tf.global_variables_initializer() # 初始化所有的变量,必须用会话run才可以激活 (有定义变量时,这步骤是必须的)

with tf.Session() as sess:
  sess.run(init)
  for _ in range(3):
    sess.run(updata)
    print(sess.run(state))

在这里插入图片描述

TensorFlow实例四

占位符(Placeholder)使用

# 定义placeholder
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
# 定义乘法运算
output = tf.multiply(input1, input2)
input_dict = {input1 : 7.0,input2 : 10.0}
# 通过session执行乘法运行
with tf.Session() as sess:
    # 执行时要传入placeholder的值
    # print(sess.run(output, feed_dict = {input1:[7.], input2: [2.]}))
    print(sess.run(output, feed_dict= input_dict ))

在这里插入图片描述

TensorFlow实例五

基于Tensorflow搭建一个神经网络的实现


import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
import numpy as np
import matplotlib.pyplot as plt


def add_layer(inputs, in_size, out_size, activation_function=None):
  Weights = tf.Variable(tf.random_normal([in_size, out_size]))  # 正态分布
  biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)  # 1行,out_size列,初始值不推荐为0,所以加上0.1
  Wx_plus_b = tf.matmul(inputs, Weights) + biases  # Weights*x+b的初始化值,也是未激活的值

  # 激活

  if activation_function is None:
    # 如果没有设置激活函数,,则直接把当前信号原封不动的传递出去
    outputs = Wx_plus_b
  else:
    # 如果设置了激活函数,则由此激活函数对信号进行传递或抑制
    outputs = activation_function(Wx_plus_b)
  return outputs


"""定义数据形式"""
# 创建一列(相当于只有一个属性值),(-11)之间,有300个单位,后面是维度,x_data是有300行
x_data = np.linspace(-1, 1, 300)[:, np.newaxis]  # np.linspace在指定间隔内返回均匀间隔数字
# 加入噪声,均值为0,方差为0.05,形状和x_data一样
noise = np.random.normal(0, 0.05, x_data.shape)
# 定义y的函数为二次曲线函数,同时增加一些噪声数据
y_data = np.square(x_data) - 0.5 + noise

# 定义输入值,输入结构的输入行数不固定,但列就是1列的值
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

"""建立网络"""
# 定义隐藏层,输入为xs,输入size为1列,因为x_data只有一个属性值,输出size假定有10个神经元的隐藏层,激活函数relu
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# 定义输出层,输出为l1输入size为10列,也就是l1的列数,输出size为1,这里的输出类似y_data,因此为1列
prediction = add_layer(l1, 10, 1, activation_function=None)

"""预测"""
# 定义损失函数为差值平方和的平均值
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))

"""训练"""
# 进行逐步优化的梯度下降优化器,学习率为0.1,以最小化损失函数进行优化
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# 初始化模型所有参数
init = tf.global_variables_initializer()

# 可视化
with tf.Session() as sess:
  sess.run(init)

  fig = plt.figure()  # 先生成一个图片框
  # 连续性画图
  ax = fig.add_subplot(1, 1, 1)  # 编号为111
  ax.scatter(x_data, y_data)  # 画散点图
  # 不暂停
  plt.ion()  # 打开互交模式
  # plt.show()
  # plt.show绘制一次就暂停了
  for i in range(1000):  # 学习1000次
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    if i % 50 == 0:

      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)  # lw线宽

      # 暂停
      plt.pause(0.5)

基于Tensorflow搭建一个神经网络的实现_第3张图片

你可能感兴趣的