Tensorflow学习一:基本参数和方法整理

一:计算图的知识:

1.tensorflow会将定义的计算转化为计算图上的结点。

2.tf会维护一个默认的计算图,通过 tf.get_default_graph  可以得到当前默认的计算图。   假设张量 a,通过a.graph  可以得到张量所属的计算图。

3. tf可以通过  tf.Graph函数生成新的计算图, 不同的计算图上的张量和运算不会共享。


二:张量:多维数组

1.张量不保存数字,保存的是得到这些数字的过程。

2.张量有三个属性,在定义时注意,分别是名字,维度,类型。

a =tf.constant([1.0, 2.0], name='a')


三:会话:

有两种使用模式:

1.

#创建一个会话
sess = tf.Session()
#运行
sess.run()
#关闭
sess.close()
2.使用python的上下文管理器

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


四.变量:Variable

1.tf中变量需要指定初始值   一般随机初始值,比如正态分布,参数是平均值,标准差,取值类型,类型不写默认是tf.float32,例如:

weights = tf.Variable(tf.random_normal([2, 3], stddev=2, mean=0))
w2 = tf.Variable(tf.random_normal([2,3], stddev=1, dtype=tf.float64), name='w2')
此外还有   

tf.truncated_normal  :正态分布,但是随机结果的值离平均值超过两个标准差,那么重新生成

tf.random_uniform   :平均分布

tf.random_gamma  :Gamma  分布


2.tf也可以使用常数初始化一个变量:

tf.zeros    :全0数组    

tf.ones   :全1数组

tf.fill      :指定数字填充     tf.fill([2, 3], 9)->[[9,9,9],[9,9,9]]

tf.constant  : 给定常量填充    tf.constant([1, 2, 3])

在神经网络中,偏置项一般使用常数设置初始值:

bias = tf.Variable(tf.zeros([3,3]))

3.tf  中变量使用前都要初始化,用以下函数:

init_op = tf.global_variables_initializer()
sess.run(init_op)

3. tf.assign  函数   可以将第二个参数的值赋给第一个,如果维度不匹配,可以通过设置  validate_shape = False  来修改·

tf.assign(w1, w2, validate_shape=False)



五:占位符

tf.placeholder:  在计算图中占据了一个位置,但是它的值可以在使用过程中再传入。三个参数,分别是类型,维度,名字

x = tf.placeholder(tf.float32, shape=(1, 2), name='input')

在计算时,要提供一个feed_dict  来指定x的值

sess.run(y, feed_dict={x: train_x})

六:tf.clip_by_value

tf.clip_by_value(A, min, max):输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。小于min的让它等于min,大于max的元素的值等于max


检验 :接下来实现一个简单的神经网络案例总结一下学到的知识:

 
 
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 20 18:55:38 2018

@author: www
"""

import tensorflow as tf
from numpy.random import RandomState

#准备数据
rs = RandomState(1)
dataset_size = 128
X = rs.rand(dataset_size, 2)
Y = [[int(x1+x2 < 1)] for (x1, x2) in X]
     
#定义网络的一些参数
batch_size = 8
w1 = tf.Variable(tf.random_normal([2,3], stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,1], stddev=1, seed=1))

x = tf.placeholder(tf.float32, shape=[None, 2], name='x_input')
y_ = tf.placeholder(tf.float32, shape=[None, 1], name='y_input')

#定义网络结构
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

#定义损失函数和反向传播
cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

#开始训练
steps = 5000

sess = tf.Session()
init_op = tf.global_variables_initializer()
sess.run(init_op)

for i in range(steps):
     start = (i * batch_size) % dataset_size
     end = min(start + batch_size, dataset_size)
     
     sess.run(train_step, feed_dict={x: X[start:end], y_:Y[start:end]})
     if i % 1000 == 0:
          total_cross_entropy = sess.run(cross_entropy, feed_dict={x:X, y_:Y})
          print("After {} training step(s), cross entropy on all data is{}".format(i,total_cross_entropy))
     
     
     
     
     
     
     
     
     


















猜你喜欢

转载自blog.csdn.net/xckkcxxck/article/details/80022709
今日推荐