1.激活函数常用的三个:
tf.nn.relu
tf.sigmoid
tf.tanh
2.异或问题
3.监督学习的两大种类:
分类问题和回归问题
分类问题使用的损失函数为交叉熵
softmax的作用是:将神经网络前向传播得到的结果变成一个概率分布
4.
v=tf.constant([1.0,2.0,3.0])
print(tf.log(v)).eval())
对每个元素取对数的命令
5.回归问题的误差函数:
均方误差损失函数:
mse=tf.reduce_mean(tf.square(y_-y))
y_代表标准答案
6.补充一个
rdm=RandomState(1)
https://blog.csdn.net/DoubleMilk/article/details/84796850
而这个随机数生成器只能生成0~1的
7.指数衰减学习率
tf.train.exponential_decay函数
随着迭代逐渐减小学习率
具体怎么用见书 P87
其中的global_step 见详解
这里有明确解释
大概意思就是 他相当于一个钟表,记录全局步数
8.L2正则化
add_to_collection函数可以将L2正则损失项加入loss
书P90
发现书上的代码有问题
解决 def get_weight(shape, lambda): 报错: ^ SyntaxError: invalid syntax 的问题
lambda是专用词 不能随便用
出现问题:
RuntimeError: Attempted to use a closed Session.
因为缩进的问题报错
以下附上完整的五层神经网络训练 运用L2正则化
#author MJY
#五层神经网络
import tensorflow as tf
from numpy.random import RandomState#为了生成模拟数据集
def get_weight(shape,lambda1):
#生成一个变量
var=tf.Variable(tf.random_normal(shape),dtype=tf.float32)
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(lambda1)(var))
return var#losses是正则化损失项
x=tf.placeholder(tf.float32,shape=(None,2))
y_ = tf.placeholder(tf.float32, shape=(None, 1))
batch_size=8
#定义每一层中节点个数
layer_dimension=[2,10,10,10,1]
#神经网络的层数
n_layers=len(layer_dimension)
#维护前向传播最深层的节点,开始的时候为输入层
cur_layer=x
#当前层节点个数
in_dimension=layer_dimension[0]
#通过循环生成五层全链接网络
for i in range(1,n_layers):
#下一层的节点个数
out_dimension=layer_dimension[i]
#生成权重
weights=get_weight([in_dimension,out_dimension],0.001)
bias=tf.Variable(tf.constant(0.1,shape=[out_dimension]))
#使用relu激活
cur_layer=tf.nn.relu(tf.matmul(cur_layer,weights)+bias)
#更新节点数
in_dimension=layer_dimension[i]
mse_loss=tf.reduce_mean(tf.square(y_-cur_layer))
tf.add_to_collection('losses',mse_loss)
loss=tf.add_n(tf.get_collection('losses'))#将所有的losses加起来可以得到最终的损失
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#引用下上个程序的数据集
#通过随机数生成一个模拟数据集:
rdm=RandomState(1)
dataset_size=128
X=rdm.rand(dataset_size,2)
Y=[[int(x1+x2<1)] for (x1,x2) in X]#定义规则
#创建会话
with tf.Session() as sess:
initial = tf.global_variables_initializer()
sess.run(initial)
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:
total_loss=sess.run(loss,feed_dict={x:X,y_:Y})
print("After %d training step(s),loss on all data is %g"%
(i,total_loss))
9.滑动平均模型先不学了