一,了解Tensorflow
安装:支持python2和3,直接pip install tensorflow即可(win10)
- 使用图(graph)来表示计算任务。
- 在会话(session)的上下文(context)中执行图。
- 使用tensor表示数据。
- 通过变量来维护状态。
- 使用feed和fetch可以为任意的操作赋值或者从其中获取数据。
Tensorflow是一个编程系统,使用图来表示计算任务。图中的节点称之为op(operation)。一个op可以获得0个或多个tensor执行计算,产生0个或多个tensor。每个tensor是一个类型化的多维数组。
一个tensorflow图描述了一个计算的过程,为了进行计算,图必须在会话中被启动。会话将图的op分发到CPU或GPU之类的设备上,同时提供执行op的方法,这些方法执行后,将产生的tensor返回。在python中,返回的tensor是numpy ndarray对象。
过程:
import tensorflow as tf
matrix1 = tf.constant([[3.,3.]])
matrix2 = tf.constant([[1.],[2.]])
product = tf.matmul(matrix1,matrix2)
with tf.Session() as sess:
result = sess.run(product)
print result
sess = tf.Session()
result = sess.run(product)
print result
sess.close( )
- 构建图的第一步,是创建源op,源op不需要任何输入,比如常量(constant)。源op的输出被传递给其他op做运算。
- 构造阶段完成后,启动图。启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图。
- TensorFlow程序使用tensor数据结构来代表所有的数据。计算图中,操作间传递的数据都是tensor。
二,神经网络及实现
# -*- coding:utf-8 -*-
# 自己搭神经网络来实现
# 1.训练的数据
# 2.定义节点准备接收数据
# 3.定义神经层:隐含层和输出层
# 4.定义损失函数
# 5.选择optimizer使loss达到最小
import tensorflow as tf
import numpy as np
# 自定义添加层的函数
def add_layer(inputs, in_size, out_size, activation_function=None):
# add one more layer and return the output of this layer
weights = tf.Variable(tf.random_normal([in_size, out_size]))
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
wx_plus_b = tf.matmul(inputs, weights) + biases
if activation_function is None:
outputs = wx_plus_b
else:
outputs = activation_function(wx_plus_b)
return outputs
# 1.训练的数据
# make up some real data
x_data = np.linspace(-1, 1, 300) # 在制定间隔内返回均匀间隔的数字
noise = np.random.normal(0, 0.05, x_data.shape) # 高斯分布的概率密度函数
y_data = np.square(x_data) - 0.5 + noise
# 2.定义节点准备接收数据
# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, shape=[None, 1])
ys = tf.placeholder(tf.float32, shape=[None, 1])
# 定义隐含层和输出层
# add hidden layer:输入值是xs,隐含层有10个神经元
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # 用relu作为激活函数
# add output layer:输入值为隐含层l1,在输出层输出一个结果
prediction = add_layer(l1, 10, 1, activation_function=None)
# 4.定义损失函数
# the error between prediction and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
# 5.选择optimizer使loss达到最小
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 学习率为0.1
# 对所有变量进行初始化
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
# 迭代1000次学习
for i in range(1000):
sess.run(train_step, feed_dict={xs: np.reshape(x_data, (-1, 1)), ys: np.reshape(y_data, (-1, 1))})
# 若直接将x_data作为输入,会出现数据shape不匹配的问题,所以要reshape一下确定至少一维的维度
if i % 50 == 0:
print(sess.run(loss, feed_dict={xs: np.reshape(x_data, (-1, 1)), ys: np.reshape(y_data, (-1, 1))}))
附:
Tensorflow常用函数说明