Tensorflow学习实战之全连接层和模型保存读取

全连接层构建

构建了一个三层的神经网络,会发现重复工作太多,隐藏层的构建很相似,所以建立一个连接层,来代替重复的构建

#全连接层
def fac_layer(inputs,#输入数据
              input_dim,#输入神经元数量
              output_dim,#输出神经元数量
              activation=None):#是否激活
    #截断正态分布随机取值
    w=tf.Variable(tf.truncated_normal([input_dim,output_dim],stddev=0.1))
    b=tf.Variable(tf.zeros([output_dim]))
    #叉乘加偏置
    x_w_b=tf.matmul(inputs,w)+b
    if activation is None:
        outputs=x_w_b
    else:
        outputs=activation(x_w_b)#激活
    return outputs

定义之后,使用就很简单了

#构建输入层
x=tf.placeholder(tf.float32,[None,784],name='x')
y=tf.placeholder(tf.float32,[None,10],name='y')
#构建隐藏层
h1_nn=256#第一层神经元个数
h2_nn=64#第二层神经元个数
h3_nn=32#第三层神经元个数
#第一层隐藏层
h1=fac_layer(inputs=x,input_dim=784,output_dim=h1_nn,activation=tf.nn.relu)
#第二层隐藏层
h2=fac_layer(inputs=h1,input_dim=h1_nn,output_dim=h2_nn,activation=tf.nn.relu)
#第三层隐藏层
h3=fac_layer(inputs=h2,input_dim=h2_nn,output_dim=h3_nn,activation=tf.nn.relu)
#构建输出层
forward=fac_layer(inputs=h3,input_dim=h3_nn,output_dim=10,activation=None)
pred=tf.nn.softmax(forward)#softmax激活

模型保存载入

进行模型保存之前,要声明一个saver函数,设置保存粒度

#声明保存函数
saver=tf.train.Saver()
save_step=5;

保存,实现设置ckpt_dir的文件夹

if (epoch+1)% save_step==0:
        saver.save(sess,os.path.join(ckpt_dir,"mnist_model_{:06d}.ckpt".format(epoch+1)))
        print("已保存:",epoch+1)

保存完成后,读取前需要构建相同的神经网络,构建准确度等

#创建saver
saver=tf.train.Saver()
#初始化
sess=tf.Session()
sess.run(tf.global_variables_initializer())
#读取数据
ckpt=tf.train.get_checkpoint_state(ckpt_dir)
if ckpt and ckpt.model_checkpoint_path:
    saver.restore(sess,ckpt.model_checkpoint_path)#还原模型
    print("Restore model from"+ckpt.model_checkpoint_path)
print("准确率:",accuracy.eval(session=sess,feed_dict={x:mnist.test.images,y:mnist.test.labels}))

Tensorboard游乐场

Tensorflow游乐场
提供了基本的神经网络训练过程及可视化,推荐一下,可以设置超参,设置隐藏层数等等,设置学习率,激活函数,正则化,分类回归等