简单神经网络
2017-10-07 11:11
225 查看
1. 三层简单神经网络
import tensorflow as tf
1.1 定义变量
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 = tf.constant([[0.7, 0.9]])
1.2 定义前向传播的神经网络(forward-propagation
)
a = tf.matmul(x, w1) y = tf.matmul(a, w2)
1.3 调用会话输出结果
sess = tf.Session() sess.run(w1.initializer) sess.run(w2.initializer) print(sess.run(y)) sess.close()
[[ 3.95757794]]
2. 使用placeholder
x = tf.placeholder(tf.float32, shape=(1, 2), name="input") # 虽然维度不一定要指定,但是指定后可以降低出错率。
a = tf.matmul(x, w1) y = tf.matmul(a, w2)
sess = tf.Session()
init_op = tf.global_variables_initializer() # 调用初始化变量
sess.run(init_op)
print(sess.run(y, feed_dict={x: [[0.7,0.9]]}))
[[ 3.95757794]]
3. 增加多个输入
x = tf.placeholder(tf.float32, shape=(3, 2), name="input")
a = tf.matmul(x, w1) y = tf.matmul(a, w2)
sess = tf.Session()
#使用tf.global_variables_initializer()来初始化所有的变量
init_op = tf.global_variables_initializer()
sess.run(init_op)
print(sess.run(y, feed_dict={x: [[0.7,0.9],[0.1,0.4],[0.5,0.8]]})) # 输入3个样例
[[ 3.95757794] [ 1.15376544] [ 3.16749239]]
import tensorflow as tf from numpy.random import RandomState
4. 完整神经网络样例程序
1. 定义神经网络的参数,输入和输出节点。
batch_size = 8 # 定义训练数据batch的大小 # 通过`seed`设定随机种子,可以保证每次运行得到的结果是一样的。 w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1)) # 在 `shape`的一个维度上使用`None`可以方便使用不大的batch大小。在训练时需要把数据分成比较小的batch,但是在测试时,可以一次性的使用全部的数据。当 # 数据集比较小时方便测试,但数据集比较大时会导致内存溢出。 x = tf.placeholder(tf.float32, shape=(None, 2), name="x-input") y_= tf.placeholder(tf.float32, shape=(None, 1), name='y-input')
2. 定义前向传播过程,损失函数及反向传播算法(back-propagation
)。
a = tf.matmul(x, w1) y = tf.matmul(a, w2)
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))) # 交叉熵,`y_` 代表正确结果,`y` 代表预测值
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy) # 反向传播优化方法
3. 生成模拟数据集。
rdm = RandomState(1) X = rdm.rand(128,2) # 定义规则来给出样本的标签,在这里所有的 `x1 + x2 < 1` 的样本被认为是正样本,而其他样本为负样本。 Y = [[int(x1+x2 < 1)] for (x1, x2) in X]
4. 创建一个会话来运行TensorFlow程序。
with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) # 输出目前(未经训练)的参数取值。 print("w1:", sess.run(w1)) print("w2:", sess.run(w2)) print("\n") # 训练模型。 STEPS = 5000 # 设定训练轮数 for i in range(STEPS): # 每次选取batch_size个样本进行训练 start = (i*batch_size) % 128 end = (i*batch_size) % 128 + batch_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("After %d training step(s), cross entropy on all data is %g" % (i, total_cross_entropy)) # 输出训练后的参数取值。 print("\n") print("w1:", sess.run(w1)) print("w2:", sess.run(w2))
w1: [[-0.81131822 1.48459876 0.06532937] [-2.4427042 0.0992484 0.59122431]] w2: [[-0.81131822] [ 1.48459876] [ 0.06532937]] After 0 training step(s), cross entropy on all data is 0.0674925 After 1000 training step(s), cross entropy on all data is 0.0163385 After 2000 training step(s), cross entropy on all data is 0.00907547 After 3000 training step(s), cross entropy on all data is 0.00714436 After 4000 training step(s), cross entropy on all data is 0.00578471 w1: [[-1.96182752 2.58235407 1.68203771] [-3.46817183 1.06982315 2.11788988]] w2: [[-1.82471502] [ 2.68546653] [ 1.41819501]]
相关文章推荐
- 最简单的三层神经网络Matlab实现
- 如何简单形象又有趣地讲解神经网络是什么?知乎
- 机器学习笔记--实现简单的神经网络
- JavaScript 实现简单的神经网络算法
- 神经网络:简单手写数字识别神经网络
- 使用python实现简单全连接神经网络
- 神经网络: 计算简单的加法
- 神经网络的简单了解
- BPTT-应用于简单的循环神经网络
- TensorFlow实战4:实现简单的多层神经网络案例
- 简单的前向传播模型实现(四层神经网络),菜鸟用于交流
- 基于python实现一个简单的神经网络
- 神经网络之感知器算法简单介绍和MATLAB简单实现
- 简单形象又有趣地说说强大的神经网络
- RBF神经网络的matlab简单实现
- 用Tensflow写简单的神经网络
- 【神经网络与深度学习】Caffe源码中各种依赖库的作用及简单使用
- 如何简单形象又有趣地讲解神经网络是什么?
- 简单了解什么是神经网络
- TensorFlow学习笔记(六)--简单神经网络搭建