TensorFlow常见函数

第一次开始接触tensorflow,据说这个工具很强大,封装了很多算法,而且只需要设计正向传播函数,逆向传播框架自己会求,在学习神经网络上很方便和快捷。下面介绍我的第一个tensorflow程序。以及tensorflow常见的函数:

1、constant、Variable、placeholder、initialize_all_variables、Session、run、assign、feed_dict

       常量  、变量  、占位符、 初始化、 会话、  运行、 变量赋值、  占位符传参

#coding:utf-8
import tensorflow as tf
a=tf.constant(10)                 #常量
b=tf.constant(20)
c=tf.add(a,b)
with tf.Session() as sess:
    print(sess.run(c))
##############################
a=tf.Variable(10)                  #变量,需要初始化init
b=tf.Variable(20)
c=tf.add(a,b)
init=tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(c))
#################################
a=tf.placeholder(tf.float32)       #占位符
b=tf.placeholder(tf.float32)
c=tf.add(a,b)
with tf.Session() as sess:
    ans=sess.run(c,feed_dict={a:10,b:20})
    print(ans)
#####################################
a=tf.placeholder(tf.int32)         #如何赋值?类似形参使用
b=tf.Variable(10)       #可以变
c=tf.constant(20)       #不能变
with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    x=sess.run(b)    #先读出来
    print(sess.run(a,feed_dict={a:x}))   #传参
    b=tf.assign(b,x*2)                   #修改变量值
    print(sess.run(b))

2、用tensorflow实现softmax(学习率和每次填充集有关,遇到了NAN错误)

①本来想手写softmax来实现Mnist数据集的分类,但是数据集太大,电脑跑不动,就用tensorflow来快速实现一下。

②tf有多强大呢?首先只需要设计正向传播,并且有读取Mnist数据集的模块,其次还能够随机填充测试集大小,实现标签和测试集的绑定,可以一次填充一张图片,一次填充所有图片,一次填充100张图片,这个填充量和学习率要对应合适。

③具体实现:(数据下载 ,下载的数据放在当前目录下的MNIST_data文件夹下)

import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
#行向量
y = tf.nn.softmax(tf.matmul(x,W) + b)
y_ = tf.placeholder("float", [None,10])
#代价函数
y = tf.clip_by_value(y, 1e-10, 1.0)          #防止出现nan错误
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#学习率
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
init = tf.initialize_all_variables()
#开始训练,前面都是预处理
sess = tf.Session()
sess.run(init)
#迭代
for i in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)   #为什么是100?不一定是100,只要学习率和这个值对应合适即可
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
  if i%100==0:
      print(sess.run(cross_entropy, feed_dict={x: batch_xs, y_: batch_ys}))
      
#预测
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
#输出
print (sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
print (sess.run(accuracy, feed_dict={x: mnist.train.images, y_: mnist.train.labels})

④为什么nan错误(概率很小时,log后变成无穷大)

⑤为什么修改填充集,反而效果更差,填充集扩大,学习率就要减小

这里的学习率参数是0.01,如果将next_batch(100)中的100增大,比如1000,神经网络很容易“走火入魔”的学习出一个准确度只有9.8%的结果。如果将学习率减小到0.001。那么结果就很容易i比较稳定的达到90%以上了。我感觉可以用一个比喻来说明这个现象:1、有个人性子比较急,你给他一点儿事情做,他很快做完,你再给他一些,他又很快做完。如此反复很多次。做得多学得多,很快成了专家。2、你没注意到这个人性子很急,你给他很多事情做,这个人疯了。3、有个人慢性子,做事情特别小心谨慎。放心吧,你给他一堆事情,他慢慢都给你做好了。最后也成了专家。

3、python的文件读写

扫描二维码关注公众号,回复: 1306279 查看本文章

①可以使用np.save和np.read来保存和读取程序运行过程中产生的参数,但是保存格式为npy,不可见,打开后是乱码

②python读取文本(只能是处理字符串)

with open("",'w') as f:          #填入路径
        f.write("我爱你")         #如果要写入的数据不是字符串类型,需要转换一下
with open("",'r') as f:          #填入路径
    line = f.readline()
    while line:
        print(line)
        line = f.readline()

猜你喜欢

转载自blog.csdn.net/hqh131360239/article/details/80337671