Tensorflow实战指南

搭建人工智能平台,数据预处理花了2周已经准备完毕。开始模型搭建。

使用 TensorFlow, 你必须明白 TensorFlow:

  • 使用图 (graph) 来表示计算任务.
  • 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
  • 使用 tensor 表示数据.
  • 通过 变量 (Variable) 维护状态.
  • 使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据.

主要数据结构是张量,tensor,变量或者占位符声明为张量。那么,创建张量。

zero_tsr = tf.zeros([3,4])
zero_tsr
<tf.Tensor 'zeros:0' shape=(3, 4) dtype=float32>
ones_tsr = tf.ones([3,4])
#用常数34填充这个维度
filled_tsr = tf.fill([3,4],34)
#传入list类型,后面可以接shape指定该list的维度
constant_tsr = tf.constant([1,2,3])
#万能的 
tf.convert_to_tensor()将常数或者numpy数组转成tensor

创建一个和指定tensor大小一样的新tensor,所有元素是0或者1,

zeros_similar = tf.zeros_like(constant_tsr)
ones_similar = tf.ones_like(constant_tsr)

和range函数或者numpy的linspace函数类似功能的:

liner_tar = tf.linspace(start = 0.0,stop = 1, num = 3)  #包括stop的值
#还有一个range()
range_tsr = tf.range(start=6, limit = 15, delta= 3)   #不包括limit的值
随机张量

均匀分布随机数,从min到max

randunif_tsr = tf.random_uniform([3,4],minval = 0,maxval = 1)

正态分布随机数

random_randn = tf.random_normal([3,4],mean =0.0,stddev = 1.0)

张量随机剪裁

croped_image = tf.random_crop(my_image,[height/2,width/2,3])
封装张量 把张量封装成变量
my_var = tf.Variable(tf.zeros([3,4]))
占位符和变量

变量是机器学习的参数,占位符是tensorflow的对象。

Graph contains a set of Operation objects, which represent units of computation; and Tensorobjects, which represent the units of data that flow between operations.

graph相当于是神经网络的neural,tesor就是data。

懒得看了基础了,直接写例子算了。

import tensorflow as tf
import numpy as np
#用numpy创建一百个随机数,转变成float32格式,因为tf支持这个
x_data = np.random.rand(100).astype(np.float32)
#拿到一个简单线性模型,并获得y值
y_data = x_data * 0.1 + 0.3
#和神经网络一样的,先初始化参数和偏置
Weight = tf.Variable(tf.random_uniform([1],-1.0,1.0))
bias = tf.Variable(tf.zeros([1]))
#weights是一维的,不用写dot
y = Weight * x_data  + bias
#找loss function和调用库去看反向传播的参数优化,步长为0.5,目的是降低lossfunction
loss = tf.reduce_mean(tf.square(y-y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
#初始化所有变量
init = tf.global_variables_initializer()
#sess 调用会话函数,就和open函数差不多。
sess = tf.Session()
sess.run(init)
for step in range(300):
    sess.run(train)
    if step % 20 == 0:
        print(step,sess.run(Weight),sess.run(bias))
会话控制 session
matrix1 = tf.constant([[2,3,4,5],[6,5,4,2]])
matrix2 = tf.constant([[2,2],[3,3],[1,9],[9,6]])
#matmul  matrix multiply 就是numpy的dot mult就是一个计算图
mult = tf.matmul(matrix1,matrix2)
#控制输出 这个会话运行这个graph
sess = tf.Session()
result  = sess.run(mult)
print(result)
sess.close()  #关闭这个会话
#还可以不用写close,这样运行完后session就自动释放出来了。
with tf.Session() as sess:
    reslut2 = sess.run(mult)

变量:保存和更新网络中的参数

也就是说,神经网络中的参数是必须存在变量中的,这样就不用自己一个个来写了。都有针对W和b的函数,非常人性化。

val = tf.Variable(0,name = 'Count')
const = tf.constant(1)
new = tf.add(val,const)
ass = tf.assign(val,new)
init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    for i in range(8):
        up = sess.run(ass)
        print(up)
#任何东西都要sess进行运行,他们不会自动运行的,把运行这个步骤独立开来了。

来看一个例子
import tensorflow as tf
from numpy.random import RandomState
#先设定batch_size
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,y的占位符
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)
y = tf.sigmoid(y)
#损失函数
cross_entropy = -tf.reduce_mean(y_*tf.log(y) + (1-y_)*tf.log(1-y))
#反向传播
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
rdm = RandomState(1)
#定义一个 养成好习惯
dataset_size = 128
X = rdm.rand(dataset_size,2)
X = X.astype(np.float32)
Y = [[int(x1 + x2 < 1)] for (x1, x2) in X]
Y = np.array(Y).astype(np.float32)
#生成会话
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(w1))
print(sess.run(w2))
STEPS = 5000
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(i,total_cross_entropy)
 sess.close()


神经网络的构建和优化

一共有五种优化模型的方法:构建深度神经网络,加入正则化项,加入滑动平均函数,加入指数递减。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值