2020.03.03 主题:张量的概念 向量的概念 标量的概念 多维数组 以及 线性神经网络模型的优化 何为线性问题 何为非线性问题
""" 神经网络模型的优化与各种概念的提出 为什么要优化: 上一章我们以0.001来调整优化器的学习效率最终做了4万次运算 现在我们要调整为0.01 以比较少的运算次数,却得出不一样的学习效率 """ """ 张量概念的引入: 张量在程序定义时蕴含了两层含义: 一是用于对输入数据的计算 二是它的输出数据,这个输出数据有可能是数组,向量或者标量 下面的程序演示的功能: 打印出各个数据的形态,从而查看认识何为张量 张量就是神经网络中神经元节点接收输入数据后经过一定计算操作输出的对象 有时候可以吧神经网络中的节点等同于张量 而节点加上连线所组成的整个神经网络模型图表现得是张量再神经网络中”流动(flow)得过程,这就是TensorFlow名称得由来“ """ import tensorflow as tf x1 = tf.placeholder(dtype=tf.float32) x2 = tf.placeholder(dtype=tf.float32) x3 = tf.placeholder(dtype=tf.float32) yTrain = tf.placeholder(dtype=tf.float32) print("x1:%s" % x1) w1 = tf.Variable(0.1, dtype=tf.float32) w2 = tf.Variable(0.1, dtype=tf.float32) w3 = tf.Variable(0.1, dtype=tf.float32) print("w1:%s" % w1) n1 = x1*w1 n2 = x2*w2 n3 = x3*w3 print("n1%s" % n1) y = n1+n2+n3 print("y:%s" % y)
运行结果截图:
""" 神经网络的优化: 第一层改进----向量的引入 向量概念的引入: 由向量重新组织输入数据 由于按照以前的套路,如果输入数据改变时,整个神经网络的模型需要去修改,比较麻烦 为了处理这个问题 引入向量的概念 我们吧输入的数据看成一组向量,吧向量送进神经网络进行计算 """ import tensorflow as tf x = tf.placeholder(shape=[3], dtype=tf.float32) # 用shape来指定变量x的形态 【3】表示这是由三个数字组成的一维数组,也就是三维向量 yTrain = tf.placeholder(shape=[], dtype=tf.float32) #目标值 """ 我们优化器主要优化的就是此可变参数 tf.Variable函数的第一个参数是定义这个可变参数的初始值 由于x是一个形态为【3】的三维向量 所以w也需要是一个形态为【3】的三维向量 tf.zeros函数可生成一个值全为0的向量 """ w = tf.Variable(tf.zeros([3]), dtype=tf.float32) n = x*w y = tf.reduce_sum(n) #吧它参数的向量中所有维度的数相加求和 loss = tf.abs(y - yTrain) #错误率 optimizer = tf.train.RMSPropOptimizer(0.001) #定义一个优化器以及优化器的学习效率 train = optimizer.minimize(loss) #train对象以最小化原则调整可变参数 sess = tf.Session() #会话对象 init = tf.global_variables_initializer() #对可变参数进行初始化 sess.run(init) #运行初始化函数 for i in range(10000): result = sess.run([train, x, w, y, yTrain, loss], feed_dict={x:[90,80,70], yTrain:85}) print(result) result = sess.run([train, x, w, y, yTrain, loss], feed_dict={x:[98,95,87], yTrain:96}) print(result)
运行结果截图如下:
""" 神经网络的优化: 第二层改进----用softmax函数来规范可变参数,也就是权值 我们得权值,也就是可变参数满足一个规律 也就是相加和为1 所以我们用softmax函数来规范可变参数 从而达到减少优化器调整可变参数的工作量 """ import tensorflow as tf x1 = tf.placeholder(dtype=tf.float32) x2 = tf.placeholder(dtype=tf.float32) x3 = tf.placeholder(dtype=tf.float32) yTrain = tf.placeholder(shape=[], dtype=tf.float32) #目标值 w1 = tf.Variable(0.1, dtype=tf.float32) w2 = tf.Variable(0.1, dtype=tf.float32) w3 = tf.Variable(0.1, dtype=tf.float32) #增加的代码 wn = tf.nn.softmax([w1, w2, w3]) #其中softmax函数可以吧向量规范后得到一个新的向量,这个新向量的所有值相加起来和为1 n1 = x1*wn[0] n2 = x2*wn[1] n3 = x3*wn[2] y = n1+n2+n3 #吧它参数的向量中所有维度的数相加求和 loss = tf.abs(y - yTrain) #错误率 optimizer = tf.train.RMSPropOptimizer(0.1) #定义一个优化器以及优化器的学习效率 train = optimizer.minimize(loss) #train对象以最小化原则调整可变参数 sess = tf.Session() #会话对象 init = tf.global_variables_initializer() #对可变参数进行初始化 sess.run(init) #运行初始化函数 for i in range(10000): result = sess.run([train, x1,x2,x3, w1,w2,w3, wn, y, yTrain, loss], feed_dict={x1:90,x2:80,x3:70, yTrain:85}) print(result) result = sess.run([train, x1,x2,x3, w1,w2,w3, wn, y, yTrain, loss], feed_dict={x1:98,x2:95,x3:87, yTrain:96}) print(result)
同样是一万次运算,运行结果截图:
另外何为线性问题:
线性问题指的是改问题本身是满足一定或者某种规律的
非线性问题指的是改问题本身或许是没有规律的
ps:今天还是吃火锅,热热身