Tensorflow使用流程小例子 ——反向传播

本文参考书籍《Tensorflow机器学习实战指南》

# -*- coding: utf-8 -*-
"""
Created on Fri Dec  1 21:50:00 2017

@author: www
"""
#1.导入模块
import tensorflow as tf
import numpy as np

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

#生成数据,创建占位符和变量A
x_vals = np.random.normal(1, 0.1, 100)
y_vals = np.repeat(10., 100)
x_data = tf.placeholder(shape=[1], dtype=tf.float32)
y_target = tf.placeholder(shape=[1], dtype=tf.float32)
A = tf.Variable(tf.random_normal(shape=[1]))

#增加乘法操作
my_output = tf.multiply(x_data, A)

#增加L2损失函数
loss = tf.square(my_output - y_target)

#初始化变量
init = tf.global_variables_initializer()
sess.run(init)

#声明变量的优化器
my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.02)
train_step = my_opt.minimize(loss)

#训练算法
for i in range(100):
    rand_index = np.random.choice(100)
    rand_x = [x_vals[rand_index]]
    rand_y = [y_vals[rand_index]]
    sess.run(train_step, feed_dict={x_data:rand_x, y_target:rand_y})
    if (i+1)%25 == 0:
        print('Step#' + str(i+1) +'A=' +str(sess.run(A)))
        print('Loss=' + str(sess.run(loss, feed_dict={x_data:rand_x, y_target:rand_y})))


#简单的分类算法例子
#重置计算图,重新初始化变量
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.Session()

#从正态分布(N(-1,1),N(3,1))生成数据,同时也生成目标标签,占位符和偏差变量A
x_vals = np.concatenate((np.random.normal(-1, 1,50), np.random.normal(3, 1, 50)))
y_vals = np.concatenate((np.repeat(0., 50), np.repeat(1., 50)))
x_data = tf.placeholder(shape = [1], dtype=tf.float32)
y_target = tf.placeholder(shape = [1], dtype=tf.float32)

#初始值A为10附近的数1,这样可以清晰看出算法是怎样收敛到10附近的
A = tf.Variable(tf.random_normal(mean=10, shape =[1]))

#增加转换操作,这里不必封装sigmoid函数,因为损失函数有这个功能
my_output = tf.add(x_data, A)

#由于指定的损失函数期望批量数据增加一个批量数的维度,这里使用expand_dims()函数增加维度,一次只使用一个随机数据
my_output_expanded = tf.expand_dims(my_output, 0)
y_target_expanded = tf.expand_dims(y_target, 0)

#初始化变量A
init = tf.global_variables_initializer()
sess.run(init)
#声明损失函数
xentropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=my_output_expanded, labels=y_target_expanded)
my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.05)
train_step = my_opt.minimize(xentropy)

#训练数据
for i in range(1400):
    rand_index = np.random.choice(100)
    rand_x = [x_vals[rand_index]]
    rand_y = [y_vals[rand_index]]
    sess.run(train_step, feed_dict={x_data:rand_x, y_target:rand_y})
    if (i+1)%200 ==0:
        print('Step#' + str(i+1) +'A=' +str(sess.run(A)))
        print('Loss=' + str(sess.run(xentropy, feed_dict={x_data:rand_x, y_target:rand_y})))











总结下来,流程有以下几点:

1:生成数据

2:初始化占位符和变量

3:创建损失函数

4:定义一个优化器算法

5:最后,通过迭代样本数据,更新变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值