tensorflow-综合学习系列实例之神经网络
本文为大家讲解如何使用tf实现一个简单的神经网络:首先大家要知道神经网络的简单组成,一般来说一个神经网络会包含,输入层
,隐藏层,输出层....,例子很简单,主要是为了学会使用tf的核心步骤:这个是核心创建层的方法
下面是完整实现代码:
# author jiahp # 创建一个简单的神经网络 包括 输入层 隐藏层 输出层 import tensorflow as tf import numpy as np #定义一个层的方法 # inputs 输入值 # in_size 输入层的数量 # out_size 输出层的数量 # activation_function 激励函数 def add_layer(inputs, in_size, out_size, activation_function=None): # 创建初始化权重 Weights = tf.Variable(tf.random_normal([in_size, out_size])) # 创建一个常量的biases 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 # 创建真实的训练数据 x_data = np.linspace(-1 ,1 ,300)[:, np.newaxis] b = np.random.normal(0, 0.05, x_data.shape) y_data = np.square(x_data) - 0.5 + b # 定义神经网络的输入参数 xs = tf.placeholder(tf.float32, [None, 1]) ys = tf.placeholder(tf.float32, [None, 1]) # 通过输入层获取到隐藏层 这里需要一个激励函数 hidden_layer = add_layer(xs, 1, 10, activation_function=tf.nn.relu) # 通过隐藏层获取到输出层 这里不再需要使用激励函数 prediction = add_layer(hidden_layer, 10, 1, activation_function=None) # 计算真实数据和预测数据之间的误差 均方根误差 loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1])) # 获取的loss train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 初始化 init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for i in range(1000): # 训练 sess.run(train_step, feed_dict={xs: x_data, ys: y_data}) if i % 50 == 0: # 打印训练数值 print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
OK,代码写完了,其实神经网络的效率是比较低的,尤其是在数据量大或者维度很复杂的情况下,对应的输入神经元和隐藏神经元的计算量会呈指数复杂,所以一般使用它的情况下,需要考虑具体的业务需求和数据量,它并不是一无是处,只不过要合理的去使用它