tensorflow实战——Day1

之前用过TensorFlow,但感觉有点迷糊,于是找本书学习一下。书名是TensorFlow实战Google深度学习框架.
链接附上https://pan.baidu.com/s/1kitoIS7hhyaJPQrGAKsMFQ 密码是 bakk

import tensorflow as tf

# tensorflow 中默认整数为int32 小数为float32
# 下面创建a和b两个常量
a = tf.constant([1, 2],dtype="float32", name="a")
b = tf.constant([3, 4], dtype="float32",name="b")
result = tf.add(a,b,name="add")
# 输出result的类型
print(result)
print(result.get_shape())

# tensorflow 中的session (会话)
# 方法一: 需要显式的关闭对话,一定要关闭,不然可能会造成资源泄露
sess=tf.Session()
print(sess.run(result))
sess.close()
# 方法二:利用Python中的上下文管理器管理session
with tf.Session() as sess:
    print(sess.run(result))
    print(result.eval())


#  变量创建,其实TensorFlow框架中变量创建和其他编程语言没什么区别
#  都需要在创建变量时初始化,只是在TensorFlow中它只是声明初始化的方式,
#  在后面还需要显式地初始化
#  下面创建了一个均值为0,方差为2 的 2*3权重张量
weight=tf.Variable(initial_value=tf.random_normal([2,3],mean=0.,stddev=2.))
#  偏置张量
bias=tf.Variable(initial_value=tf.ones(shape=[2,3]),dtype="float32")
# 根据weight的初始值来初始化weight1
weight1=tf.Variable(initial_value=weight.initial_value()*2.0)

跑个最简单的神经网络

tensorflow实战——Day1_第1张图片

# 下面跑一个最简单的神经网络
# mini-batch = 10
mini_batch=10
# 权重
w1=tf.Variable(initial_value=tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(initial_value=tf.random_normal([3,1],stddev=1,seed=1))
# 输入
x=tf.placeholder(dtype=tf.float32,shape=(None,2),name="x_input")
y=tf.placeholder(dtype=tf.float32,shape=(None,1),name="y_input")
# FP(向前传播)
a=tf.matmul(x,w1)
y_hat=tf.matmul(a,w2)

# 交叉熵
cross_entropy=-tf.reduce_mean(y*tf.log(tf.clip_by_value(y_hat,1e-10,1.0)))
# 学习速率(BP中用到)
learning_rate=0.001
# 采用Adam加速
train_step=tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)

# 模拟一个数据集
rdm=RandomState(1)
dataset_size=200

X=rdm.rand(dataset_size,2)
# 定义x1+x2<1的为正样本
Y=[[int(x1+x2<1)] for (x1,x2) in X]

with tf.Session() as sess:
    # 显式地初始化
    # sess.run(w1.initializer)
    # sess.run(w2.initializer)
    # 当然 ,假如有100个权重张量,那一个一个去初始化。。。so,可以这样
    init_op=tf.global_variables_initializer()
    sess.run(init_op)
    # 输出训练前的参数
    print(sess.run(w1))
    print(sess.run(w2))

    # 训练的论数
    epoch=5000
    for i in range(epoch):
        # 每次选mini_batch个数据训练
        start=(i*mini_batch)%dataset_size
        end=min(start+mini_batch,dataset_size)

        sess.run(train_step,feed_dict={x:X[start:end],y:Y[start:end]})
        if i%500==0:
            #每500轮输出一次交叉熵
            total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y:Y})
            print("After" + str(i)+" epoch,cross entropy on all dataset is "+str(total_cross_entropy))

    # 输出训练后的参数
    print(sess.run(w1))
    print(sess.run(w2))

你可能感兴趣的:(神经网络,TensorFlow)