学习笔记——Anaconda3与TensorFlow搭建(未完待续)

本文详细介绍了如何在Windows环境下安装Anaconda3与TensorFlow,提供了安装步骤及注意事项。并通过实例展示了TensorFlow的基本概念、张量、计算图、会话、参数等核心组件的使用方法,以及神经网络的搭建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博文为本人安装TensorFlow与使用过程的学习笔记~(最近学的东西太多了~我把所有学习的笔记都写成博文的形式?)

 

 

 

安装Anaconda3与TensorFlow

安装Anaconda3

安装连接:

A.官网https://www.anaconda.com/download/

B.清华镜像网站安装https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

本文安装版本为Anaconda3-5.1.0-Windows-x86_64.exe

安装Anaconda3注意事项

选择All Users,不然会出现一些奇怪问题

第一项Add Anaconda… 这个是说将安装路径填入到系统环境变量中,选上;

第二项是说要默认使用python3.6的版本,也选上。

检验是否安装成功anaconda

在cmd中输入 python,查看是否有:

 

安装TensorFlow(基于Anaconda3的安装方法

1、运行Anaconda Prompt,指定python版本:

conda create -n tensorflow python=3.5

2、激活环境:

activate root

3、在Anaconda Prompt中激活你的环境之后,通过pip安装(该指令默认获取的是清华镜像网站上最新版的Tensorflow):

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow

验证安装是否成功

在Anaconda3的Spyder或者cmd窗口下的python输入以下代码测试:

 

TensorFlow的使用

学习时的参考教材

1、TensorFlow中文社区提供的入门教程http://www.tensorfly.cn/tfdoc/get_started/introduction.html

2、基础入门书(入门推荐):TensorFlow+实战Google深度学习框架(第2版)

3、研究各种网络框架:选用《TensorFlow实战》

4中文API手册(很详细,值得一看):https://www.w3cschool.cn/tensorflow_python/tensorflow_pythonrgow2c85.html

5、英文API手册:http://docs.w3cub.com/tensorflow~python/

 

tensorflow的基本概念

TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。(对于公司大多数会采用tensorflow开发CV,但是对于学术、研究院可能更多选择用PyTorch,接下来会有PyTorch方面的学习笔记)

简单示例

import tensorflow as tf

#定义“符号”变量,也称为占位符
a=tf.placeholder("int32")
b=tf.placeholder("int32")

#构造一个op(操作)节点
y=tf.multiply(a,b)

#创建会话
sess=tf.Session()

#运行会话,输入数据,并计算节点,同时打印结果
print(sess.run(y, feed_dict={a:[2], b:[3]}))

#任务完成,关闭会话
sess.close()

基于TensorFlow的神经网络

用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(超参),得到模型

Tensor(张量)——就是多维数组(列表),用“阶”表示张量的维度。

  • 0 阶张量称作标量,表示一个单独的数; 举例 S=123
  • 1 阶张量称作向量,表示一个一维数组; 举例 V=[1,2,3]
  • 2 阶张量称作矩阵,表示一个二维数组,它可以有 i 行 j 列个元素,每个元素可以用行号和列号共同索引到; 举例 m=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

判断张量是几阶的,就通过张量右边的方括号数,0 个是 0 阶,n 个是 n 阶张量可以表示 0 阶到 n 阶数组(列表);举例 t=[ [ [… ] ] ]为 3 阶。Tensorflow中,主要有以下几种数据类型。

下面再举一个例子

打印出来的结果的意思是:result是一个名为“add_1:0”的张量。“shape=(2,)”表示一维数组,长度为2。“dtype=float32”代表数据类型为浮点型。

计算图(Graph)——搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算。

神经网络的基本模型是神经元,神经元的基本模型其实就是数学中的乘、加运算。我们搭建如下的计算图:

x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1*w1+x2*w2。

我们实现上述计算图:

import tensorflow as tf
x = tf.constant([[1.0, 2.0]])   #定义一个张量等于[[1.0,2.0] 
w = tf.constant([[3.0], [4.0]])   #定义一个张量等于[[3.0,4.0] 
y=tf.matmul(x,w)   #实现矩阵相乘
print(y)

输出结果为

Tensor("MatMul_7:0", shape=(1, 1), dtype=float32)

print 的结果显示 y 是一个张量,只搭建承载计算过程的计算图,并没有运算,如果我们想得到运算结果就要用到“会话 Session()”了。

会话(Session)——执行计算图中的节点运算。

import tensorflow as tf
x = tf.constant([[1.0, 2.0]])   #定义一个张量等于[[1.0,2.0] 
w = tf.constant([[3.0], [4.0]])   #定义一个张量等于[[3.0,4.0] 
y=tf.matmul(x,w)   #实现矩阵相乘
print(y)

with tf.Session() as sess:
    print(sess.run(y))

结果为:

Tensor("MatMul_8:0", shape=(1, 1), dtype=float32)
[[11.]]

可以看到,运行Session()会话前只打印出y是个张量的提示,运行Session()会话后打印出了 y 的结果 1.0*3.0 + 2.0*4.0 = 11.0。

神经网络的参数——是指神经元线上的权重 w,用变量表示,一般会先随机生成这些参数。生成参数的方法是让w等于tf.Variable,把生成的方式写在括号里。 神经网络中常用的生成随机数/数组的函数有:

w1=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))
#表示生成正态分布随机数,形状两行三列,标准差是2,均值是 0,随机种子是 1
#随机种子如果去掉每次生成的随机数将不一致。
#如果没有特殊要求标准差、均值、随机种子是可以不写的。

理解了张量、计算图、会话和参数的关系后,可以讨论神经网络的实现过程了。神经网络实现的步骤如下:

step 1: 准备数据集,提取特征,作为输入喂给神经网络(Neural Network,NN)

step 2:搭建 NN 结构,从输入到输出(先搭建计算图,再用会话执行) ( NN 前向传播算法计算输出)

step 4:大量特征数据喂给 NN,迭代优化 NN 参数 (NN 反向传播算法优化参数训练模型)

step 4:使用训练好的模型预测和分类.

前向传播——前向传播就是搭建模型的计算过程,让模型具有推理能力,可以针对一组输入给出相应的输出。如下图所示,前向传播就是给网络输入数据,然后根据权值计算,输出结果,从网络的左边到右边

由搭建的神经网络可得,隐藏层节点 a11=x1* w11+x2*w21=0.14+0.15=0.29,同理算得节点 a12=0.32,a13=0.38,最终计算得到输出层 Y=-0.015,这便实现了前向传播过程。

用x表示输入,是一个 1 行 2 列矩阵,表示一次输入一组特征,这组特征包含了两个元素。

对于第一层的 w 前面有两个节点,后面有三个节点 w 应该是个两行三列矩阵,故此可以这样表示:

神经网络共有几层(或当前是第几层网络)都是指的计算层,输入不是计算层,所以 a 为第一层网络(也有一种说法把输入层看作第0层)。a 是一个一行三列矩阵。 可以表示为:

对于第二层网络,参数要满足前面三个节点,后面一个节点,所以 W(2) 是三行一列矩阵

把每层输入乘以线上的权重 w,这样用矩阵乘法可以计算出输出 y 了

由于需要计算结果,就要用 with 结构实现,所有变量初始化过程、计算过程都要放到 sess.run 函数中。对于变量初始化,在 sess.run 中写入tf.global_variables_initializer 实现对所有变量初始化,也就是赋初值。对于计算图中的运算,直接把运算节点填入 sess.run 即可,比如要计算输出y,直接写 sess.run(y) 即可。

在实际应用中,我们可以一次给网络一组或多组输入,让神经网络计算输出 y,可以先用 tf.placeholder 给输入占位。如果一次输入一组数据 ,shape 的第一维位置写 1,第二维位置看有几个输入特征;如果一次想输入多组数据,shape 的第一维位置可以写 None 表示先空着,第二维位置写有几个输入特征。这样在 feed_dict中可以输入若干组特征值了。

神经元模型:用数学公式表示为——,f为激活函数,神经网络是以神经元为基本单元构成的。

常用的激活函数

  •  激活函数 relu: 在 Tensorflow 中,用 tf.nn.relu()表示

  • 激活函数 sigmoid:在 Tensorflow 中,用 tf.nn.sigmoid()表示

  •  激活函数 tanh:在 Tensorflow 中,用 tf.nn.tanh()表示

前向传播的代码

import tensorflow as tf

#定义输入和参数
x=tf.placeholder(tf.float32, shape=(1,2))#用 tf.placeholder 占位,作为存放输入。在 sess.run 函数中用 feed_dict 喂数据 
w1=tf.Variable(tf.random_normal([2,3], stddev=1, seed=1))
w2=tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))

#定义正向传播过程
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)

#用会话计算结果
#with tf.Session() as sess:#变量初始化、计算图节点运算都要用会话(with 结构)实现
with tf.Session() as sess:
    #在 sess.run 函数中用 tf.global_variables_initializer()汇总所有待优化变量。
    init_op=tf.global_variables_initializer()#对待优化参数进行初始化
    sess.run(init_op)
    print(sess.run(y,feed_dict={x:[[0.7,0.5]]}))#在 sess.run 函数中用 feed_dict 喂数据 

结果

[[3.0904665]]

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值