本文参考书籍《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:最后,通过迭代样本数据,更新变量