tf学习笔记

1. 占位符(tf.placeholder)和变量(tf.Variable)

  • tf.placeholder,用于传递真实的样本
  • 创建时不必指定初始值,可在运行时,通过Session.run函数的feed_dict的参数指定
  • tf.Variable,用于可变的训练变量,如模型的权重或者偏置
  • 创建时必须提供初始值,变量的值会随模型的训练而改变

 示例:

stddev = 0.1
weights = {
    'w1': tf.Variable(tf.random_normal([n_input, n_hidden_1], stddev=stddev)),
    'w2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], stddev=stddev)),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes], stddev=stddev))
}


x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])

2. tf.random_normal使用方法

从正态分布中输出随机值,默认均值μ = 0, 标准差σ = 1。

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

  •     shape: 输出张量的形状,必选
  •     mean: 正态分布的均值,默认为0
  •     stddev: 正态分布的标准差,默认为1.0
  •     dtype: 输出的类型,默认为tf.float32
  •     seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样
  •     name: 操作的名称

 3. 一些函数:

  • tf.matmul()  求内积,矩阵乘
  • tf.multiply(a, b, name='dot_product')  对应位置元素相乘
  • b = tf.constant(3)  定义常量3并赋给b
  • tf.random_uniform((6, 6), minval=low,maxval=high,dtype=tf.float32)))  返回6*6的矩阵,产生于low和high之间,产生的值是均匀分布的, maxval默认值为1.
  • # tf.add(a, b)  a,b都为张量,并且类型必须一致
  • # tf.nn.bias_add(a, b)  将偏差bias加到对应value上面 
  • # tf.add_n(inputs,name=None)  将inputs列表元素相加
  • tf.nn.sigmoid()  sigmoid激活
  • tf.reduce_mean()  求平均
  • tf.nn.softmax_cross_entropy_with_logits(pred, y)  损失函数之---交叉熵函数
  • tf.equal()  对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的。
  • tf.argmax(pred, 1)  返回最大的那个数值所在的下标, 1横着来。
  • tf.nn.embedding_lookup(tensor, ids) 将一个张量与索引对应起来.

4.  建模流程:

参数定义:

inputs and outputs(x, y) -- network Parameter setting(w, b) 

计算定义:

predictions(nn传播计算定义) -- loss and optimizer(cost, optm, corr accr) -- init

开始计算:

每一个epoch(迭代次数)再每一个batchsize(样本大小)的进行计算

示例:

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data


# NETWORK TOPOLOGIES
n_hidden_1 = 256 
n_hidden_2 = 128 
n_input    = 784 
n_classes  = 10  

# INPUTS AND OUTPUTS
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
    
# NETWORK PARAMETERS
stddev = 0.1
weights = {
    'w1': tf.Variable(tf.random_normal([n_input, n_hidden_1], stddev=stddev)),
    'w2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], stddev=stddev)),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes], stddev=stddev))
}
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}
print("NETWORK READY")

def multilayer_perceptron(_X, _weights, _biases):
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(_X, _weights['w1']), _biases['b1'])) 
    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, _weights['w2']), _biases['b2']))
    return (tf.matmul(layer_2, _weights['out']) + _biases['out'])


# PREDICTION
pred = multilayer_perceptron(x, weights, biases)

# LOSS AND OPTIMIZER
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) 
optm = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(cost) 
corr = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))    
accr = tf.reduce_mean(tf.cast(corr, "float"))

# INITIALIZER
init = tf.global_variables_initializer()
print ("FUNCTIONS READY")
training_epochs = 20
batch_size      = 100
display_step    = 4
# LAUNCH THE GRAPH
sess = tf.Session()
sess.run(init)

# OPTIMIZE
for epoch in range(training_epochs):
    avg_cost = 0.
    total_batch = int(mnist.train.num_examples/batch_size)
    # ITERATION
    for i in range(total_batch):
        batch_xs, batch_ys = mnist.train.next_batch(batch_size)
        feeds = {x: batch_xs, y: batch_ys}
        sess.run(optm, feed_dict=feeds)
        avg_cost += sess.run(cost, feed_dict=feeds)
    avg_cost = avg_cost / total_batch
    # DISPLAY
    if (epoch+1) % display_step == 0:
        print("Epoch: %03d/%03d cost: %.9f" % (epoch, training_epochs, avg_cost))
        feeds = {x: batch_xs, y: batch_ys}
        train_acc = sess.run(accr, feed_dict=feeds)
        print("TRAIN ACCURACY: %.3f" % (train_acc))
        feeds = {x: mnist.test.images, y: mnist.test.labels}
        test_acc = sess.run(accr, feed_dict=feeds)
        print("TEST ACCURACY: %.3f" % (test_acc))
print("OPTIMIZATION FINISHED")

5. 卷积神经网络(多了卷积层和池化层)

feature_map尺寸计算公式:[ (原图片尺寸 -卷积核尺寸 + 2*Padding)/ 步长 ] + 1

tf.nn.conv2d() 是TensorFlow里面实现卷积的函数,它是搭建卷积神经网络比较核心的一个方法,非常重要。

具体参考tf.nn.conv2d()参数详解

6. 循环神经网络

tf.nn.rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0, state_istuple=True) 是最简单的一个LSTM类

还有其它rnn实现类,几种lstm对比

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值