一、 什么是激励函数?TF中常用的激励函数有那些?
激励函数的作用就是将多个线性输入转换为非线性的关系。
常用的激励函数主要有:ReLU、ReLU6、sigmoid、tanh、softsign、ELU等。
二、 任何函数都有梯度吗?如果不是,那么一个函数具有梯度的条件是什么?
该节点操作不可导
三、 什么是感知机?
感知机是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机的使用前提是数据本身线性可分。
四、 感知机的局限性是什么?
(1)感知机是线性的模型,其不能表达复杂的函数,不能出来线性不可分的问题,其连异或问题(XOR)都无法解决,因为异或问题是线性不可分的
(2)怎样解决这个问题呢,通常有两种做法。其一:用更多的感知机去进行学习,这也就是人工神经网络的由来。其二:用非线性模型,核技巧,如SVM进行处理。
五、 什么是线性可分问题?什么是线性不可分问题?
线性可分:即可以找到一个超平面,将数据集按类别分开
线性不可分:找不到一个超平面,恰好能把两类数据严格地分开。
六、 感知机的损失函数如何设计?
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。
七、 代码???(LinearReg_DIY.py案例)
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #构造训练数据:使用numpy生产在一条斜率为0.1、偏移是0.2的直线上分布的100个随机点 #x_train = np.random.random(100) #y_train = x_train * 0.1 + 0.2 x_train = np.linspace(0,1,100) print("x_train.shape == ", x_train.shape) y_train = 2 * x_train + np.random.rand(*x_train.shape) + 1 x_data = tf.placeholder(dtype="float32") y_data = tf.placeholder(dtype="float32") #构造一个线性模型,斜率k,偏移b,变量x_data b = tf.Variable(1.0) k = tf.Variable(1.0) y = k * x_data + b #优化变量k、b使线性模型接近于上面样本点的分布,定义二次代价(或者叫目标/损失)函数 # reduce_mean()求平均值、square()求平方 y_data是真实值,y是预测值 loss = tf.reduce_mean(tf.square(y_data-y)) #定义一个梯度下降法来进行训练的优化器, GradientDescentOptimizer()梯度下降法优化器(括号内给定学习率) optimizer = tf.train.AdamOptimizer(0.1) #optimizer = tf.train.MomentumOptimizer(0.1,momentum=0.5) #optimizer = tf.train.GradientDescentOptimizer(0.1) #最小化代价(或者叫目标/损失)函数 train = optimizer.minimize(loss) #初始化变量 init = tf.global_variables_initializer()
with tf.Session() as sess: sess.run(init) writer = tf.summary.FileWriter("E:\PycharmProjects\TensorBoard\test", sess.graph) # 迭代若干次 for epoch in range(99): _, w_value, b_value = sess.run([train,k,b], feed_dict={x_data:x_train,y_data:y_train}) if epoch % 2 == 0: #每训练*次打印一次 print("epoch:{}, w: {}, b: {}".format(epoch ,w_value, b_value)) writer.close() plt.plot(x_train, y_train,"+") plt.plot(x_train,w_value * x_train + b_value) plt.show()