Tensorflow运作之变量

引自:http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/variables.html
在训练模型时,需要使用变量来存储和更新参数。
变量包含张量(Tensor)存放于内存的缓存区。
建模时它们需要明确地初始化,模型训练后它们必须被存储到磁盘。
这些变量的值可在之后的模型训练和分析时被加载。
1、创建
创建变量需要将一个张量作为初始值传入构造函数Variable()。TensorFlow提供了一系列操作符来初始化张量,初始值可以是常量或随机值。
注意,所有的这些操作符都需要你指定张量的shape。指定那个形状自动成为变量的shape。变量的shape通常是固定的,但TF也提供来高级机制来重新调整其行列数。

#Create two variables
weights = tf.Variable(tf.random_normal([784,200],stddev = 0.35),name="weights")
biases = tf.Variable(tf.zeros([200]),name ="biases")

调用tf.Variable()添加一些操作(Op)到graph

  • 一个Variable操作存放变量的值
  • 一个初始化op将变量设置为初始值。这事实上是一个tf.assign操作
  • 初始值的操作,例如示例中对biases变量的zeros操作也被加入来graph
    tf.Variable的返回值是Python的tf.Variable类的一个实例。
    2、初始化
    变量的初始化必须在模型的其它操作之前先明确地完成。最简单的方法就是添加一个给所有变量的初始化操作,并在使用模型之前首先运行那个操作。
    或者可以从检查点文件中重新获取变量值,详见下文。
    使用tf.global_vaiables_initializer()添加一个操作对变量做初始化。记得在完全构建好模型并加载之后再运行那个操作。
#Create two variables
weights =tf.Variable(tf.random_normal([784,200],stddev =0.35),name = "weights")
biases = tf.Variable(tf.zeros([200]),name="biases")
...
#Add an op to initialize the variables
init_op = tf.global_variables_initializer()

#later,when launching the model
with tf.Seeion() as  sess:
    #Run the init operation
    sess.run(init_op)
    ...
    #Use the model
    ....

3、由另一个变量初始化
有时候需要用另一个变量的初始化值给当前变量初始化。由于tf.global_variables_initializer()是并行地初始化所有变量,所以在这种需求的情况下需要小心。
用其他变量的值的初始化一个新的变量需要使用其他变量的initialize_value()属性。你可以直接把已初始化的值作为新变量的初始值,或者把它当作tensor计算得到一个值赋予新变量。

#Create a variable with a random value
weights = tf.Variable(tf.random_normal([784,200],stddev=0.35),name="weights")
#Create another variable with the same value as 'weights'
w2 = tf.Variable(weights.initialized_value(),name="w2")
#Create another variable with twice the value of 'weights'
w_twice = tf.Variable(weights.initialized_value()*2,name="w_twice")

4、自定义初始化
tf.global_variables_initializer()函数便捷地添加一个op来初始化模型的所有变量。你可以给它传入一组变量进行初始化。详情见Variables Documentation,包括检查变量是否被初始化。
5、保存和加载
最简单的保存和恢复模型的方法是使用tf.train.Saver对象。构造器给graph的所有变量,或是定义在列表里的 变量,添加save和restore ops。saver对象提供来方法来运行这些ops,定义检查点文件的读写路径。
6、检查点文件
变量存储在一个二进制文件里,主要包含从变量名到tensor值的映射关系。
当你创建一个Saver对象时,你可以选择性地为检查点文件中的变量挑选变量名。默认情况下,将每个变量variable.name属性的值。
7、保存变量
用tf.train.Saver()创建一个Saver来管理模型中的所有变量。

#Create some variables
v1 = tf.Variable(...,name="v1")
v2 = tf.Variable(...,name ="v2")
...
#Add an op to initialize the variables
init_op = tf.global_variables_initializer()

#Add ops to save and restore all the variables.
saver = tf.train.Saver()

#Later, launch the model,initialize the variables,do some work,save the variables to disk.
#稍后,启动模型,初始化变量,做一些工作,将变量保存到磁盘。 
with tf.Session() as sess:
   sess.run(init_op)
   #Do some work with the model
   ..
   #save the variables to disk
   save_path =saver.save(sess,"/tmp/model.ckpt")
   print"Model saved in file: ",save_path 

8、恢复变量
用同一个Saver对象来恢复变量。注意,当你从文件中恢复变量时,不需要事先对它们做初始化。

#Create some variables
v1 =tf.Variables(...,name="v1")
v2 = tf.Variables(...,name ="v2")
...
#Add ops to save and restore all the variables
saver =tf.train.Saver()

#Later, launch the model, use the saver to restore variables from disk, and do some work with the model
with tf.Session() as sess:
  #Restore variables from disk
  saver.restore(sess,"/tmp/model.ckpt")
  print "Model restored"
  #Do some work with the model
  ...

9、选择存储和恢复那些变量
如果你不给tf.train.Saver()传入任何参数,那么saver将处理graph中的所有变量。其中每一个变量都以变量创建时传入的名称被保存。
有时候在检查点文件中明确定义变量的名称很有用。举个例子,你也许已经训练得到来一个模型,其中有个变量的命名为“weights”,你想把它恢复到一个新的变量“param”中。
有时候仅保存和恢复一部分变量很有用。eg:你也许训练得到来一个5层神经网络,现在想训练一个6层的新模型,可以将之前5层模型的参数导入到新模型的前5层中。
你可以通过给tf.train.Saver()构造函数传入Python字典,很容易地定义需要保持的变量及对应名称:键对应使用的名称,值对应被管理的变量。
注意:

  • 如果你需要保存和恢复模型变量不同子集,可以创建任意多个saver对象。同一个变量可被列入多个saver对象中,只有当saver的restore()函数被运行时,它的值才会发生改变。
  • 如果你仅在session开始时恢复模型变量的一个子集,你需要对剩下的变量执行初始化op。详情请见tf.initialize_variables()。
#Create some variables
v1 = tf.Variables(...,name="v1")
v2 = tf.Variables(...,name="v2")
...
#Add ops to save and restore only 'v2' using name "my_v2"
saver = tf.train.Saver({"my_v2": v2})
#Use the saver object normally after that
【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值