Tensorflow-DNN

来源:互联网 发布:淘宝天天特价报名要求 编辑:程序博客网 时间:2024/06/06 16:36

1、使用softmax

#!/usr/bin/python3# -*- coding:utf-8 -*-import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt"""多层感知"""from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)# mnist图像大小是28x28 分成0~9 共10类x=tf.placeholder(tf.float32,[None,28*28*1])y_=tf.placeholder(tf.float32,[None,10])with tf.variable_scope('wb'):    w=tf.get_variable('w',[28*28,128],initializer=tf.random_uniform_initializer)*0.001    b=tf.Variable(tf.zeros([128])+0.1,dtype=tf.float32)with tf.variable_scope('wb2'):    w2 = tf.get_variable('w2', [128, 10], initializer=tf.random_uniform_initializer) * 0.001    b2=tf.Variable(tf.zeros([10])+0.1,dtype=tf.float32)y=tf.nn.relu(tf.add(tf.matmul(x,w),b))y=tf.nn.softmax(tf.add(tf.matmul(y,w2),b2))loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y))train_op=tf.train.AdamOptimizer(0.1).minimize(loss)correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))# Calculate accuracyaccuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))sess=tf.InteractiveSession(graph=tf.get_default_graph())tf.global_variables_initializer().run()for step in range(10000):    batch_xs, batch_ys = mnist.train.next_batch(128)    train_op.run({x:batch_xs,y_:batch_ys})    if step % 1000==0:        print("step",step,'acc',accuracy.eval({x:batch_xs,y_:batch_ys}),'loss',loss.eval({x:batch_xs,y_:batch_ys}))# test accprint('test acc',accuracy.eval({x:mnist.test.images,y_:mnist.test.labels}))sess.close()

结果:
这里写图片描述

2、不使用softmax

y=tf.nn.relu(tf.add(tf.matmul(x,w),b))# y=tf.nn.softmax(tf.add(tf.matmul(y,w2),b2))y=tf.add(tf.matmul(y,w2),b2)

这里写图片描述

说明:上面的多层感知,其实只有一个隐藏层,如果觉得精度不够,可以参考下面的提到的方法进行修改!
一般设计网络解决问题,都是从简单到复杂,从最简单的logical 回归开始,如果精度达不到要求,主要从以下几个方面入手:
①调学习效率
②加大训练步数
③修改batch size 2^n (16~512)
④修改隐藏单元节点数 (满足2^n )
⑤加深神经层 重复①~④步

其他:加入归一化、正则化,数据增强等

以后会专门讲一些我所知道的调参和神经网络的设计!

另外补充说明:
一般sigmoid 与softmax 仅用于分类问题 输出层(也可以不使用) ,注 是分类的最后一层,对于隐藏层不要使用,回归时不要使用,其中sigmoid用于二分类,softmax用于多分类(包括二分类,二分类时,softmax就是sigmoid 数学表达式一样)

原创粉丝点击