神经网络学习入门(一) 模拟数据二分类
2018-01-04 15:25
239 查看
神经网络学习入门干货(一) 模拟数据二分类
基于Python3和Tensorflow的代码实现:
导入TensorFlow库和常用Python库定义训练数据batch大小
定义神经网络权重参数
定义输入向量
定义神经网络前向传播过程
定义损失函数和反向传播优化算法
生成模拟数据集
创建执行会话
训练轮数和样本设置
训练并更新参数
交叉熵输出
实现代码
# 导入TensorFlow库和Numpy库里的random函数 import tensorflow as tf from numpy.random import RandomState # 定义训练数据的批次大小 batch_size = 8 # 定义神经网络参数 w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1)) # 定义深度学习网络的输入向量.维度为None可以方便使用不同batch进行训练 x = tf.placeholder(tf.float32, shape=(None, 2), name='x-input') y_ = tf.placeholder(tf.float32, shape=(None, 1), name='y-input') #神经网络前向传播计算 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))) train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy) # 通过随机函数生成模拟数据集,输入X为128行2维的随机数据集,服从正态分布。样本标签Y为1或0,根据特征之和是否大于1来判定。 rdm = RandomState(1) dataset_size = 128 X = rdm.rand(dataset_size, 2) Y = [[int (x1+x2 < 1)] for (x1, x2) in X] #创建一个会话来运行Tensorflow程序 with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) print (sess.run(w1)) print (sess.run(w2)) # 训练之前神经网络参数的值 w1 = [[-0.81131822 1.48459876 0.06532937] [-2.44270396 0.0992484 0.59122431]] w2 = [[-0.81131822] [ 1.48459876] [ 0.06532937]] # 设定训练轮数 STEPS = 5000 for i in range(STEPS): # 每次选取batch_size个样本进行训练 start = (i * batch_size) % dataset_size end = min(start+batch_size, dataset_size) # 通过选取的样本训练神经网络并更新参数 sess.run(train_step, feed_dict={x: X[start:end], y_:Y[start:end]}) if i % 1000 == 0: #每隔一段时间计算在所有数据上的交叉熵并输出损失函数值。%d输出为整数,%g输出为实数。 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)) #输出的交叉熵值 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 print (sess.run(w1)) print (sess.run(w2)) #5000轮训练之后神经网络的参数值 w1 = [[-1.9618274 2.58235407 1.68203783] [-3.4681716 1.06982327 2.11788988]] w2 = [[-1.8247149 ] [ 2.68546653] [ 1.41819501]]
相关文章推荐
- [学习笔记]人工智能-神经网络对数据进行分类,构建二维矩阵
- CS231n 学习笔记(1)——神经网络 part1 :图像分类与数据驱动方法
- [学习笔记]人工智能-神经网络对数据进行分类-可视化
- 数据分析、数据挖掘、机器学习、神经网络、深度学习和人工智能概念区别(入门级别)
- 数据挖掘学习------------------4-分类方法-4-神经网络(ANN)
- 模式分类 学习笔记 第6章 多层神经网络
- 深度学习 vs. 大数据:神经网络权值的版权属于谁?
- 神经网络入门学习(一(
- (转)机器学习之&&Andrew Ng课程复习---神经网络编程入门
- 连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(1)
- 深度学习与计算机视觉系列(7)_神经网络数据预处理,正则化与损失函数
- 神经网络入门--学习资源
- Andrew Ng机器学习入门学习笔记(四)之神经网络(一)
- 连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载開始了(1)
- 斯坦福大学深度学习与自然语言处理第四讲:词窗口分类和神经网络
- 深度学习与计算机视觉系列(7)_神经网络数据预处理,正则化与损失函数
- 连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(4)
- matlab的神经网络学习入门
- 深度学习与计算机视觉系列(7)_神经网络数据预处理,正则化与损失函数
- 【神经网络学习笔记】BP神经网络-语音特征信号分类