tensorflow学习小记2

#一个完整的神经网络实例
在一个模拟数据及上训练神经网络来训练二分类问题

import tensorflow as tf
from numpy.random import RandomState  # 虽然报错并不影响使用,这在random中是私有
batch_size = 8

w1 = tf.Variable(tf.random_normal((2, 3), stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal((3, 1), stddev=1, seed=1))

x = tf.placeholder(tf.float32, shape=[None, 2], name="x-input")
y_ = tf.placeholder(tf.float32, shape=[None, 1], name="y-input")
# None表示使用不同的batch大小,训练时候采取较小的batch,测试时可一次使用全部的数据,但当数据集较大时候可能会导致内存溢出

a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

# 前向传播

y = tf.sigmoid(y)  # 激活函数
cross_entropy = -tf.reduce_mean(
    y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)) + (1 - y)*tf.log(tf.clip_by_value(1 - y, 1e-10, 1.0)))  # 交叉熵
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)  # Adam优化方法


rdm = RandomState(1) # 随机一个模拟数据集
dataset_size = 128
X = rdm.rand(dataset_size, 2)
# 数据集的大小为128*2


Y = [[int(x1+x2 < 1)] for (x1, x2) in X]  # !!注意这里Y是一个[:1]维的张量
# 定义规则给样本做标签,可看作是一个二分类任务,用0 1表示,定义判断方法

with tf.Session() as sess:  # 开始创建会话
    init_op = tf.global_variables_initializer()  # 全局变量变量初始化
    sess.run(init_op)

    print(sess.run(w1))
    print(sess.run(w2))  # 打印初始变量

    # 设定训练的轮数
    STEPS = 5000
    for i in range(STEPS):
        # 每次选取batch个样本进行训练
        start = (i * batch_size) % dataset_size
        end = min(start + batch_size, dataset_size)

        # 通过选取的样本训练神经网络并更新参数
        sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]})
        if i % 1000 == 0:
            # 每隔一段时间计算所在数据上的交叉熵并输出
            total_cross_entropy = sess.run(cross_entropy, feed_dict={x: X, y_: Y})
            print("After %d training steps(s), cross entropy on all data is %g" %
                  (i, total_cross_entropy))
    print(sess.run(w1))
    print(sess.run(w2))


第四章部分笔记
a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)   # 类似的tf.nn.sigmod(),tf.tanh()


cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, le-10, 1.0)))  # y_代表正确结果,y代表预期结果/
# tf.clip_by_value(t,clip_valuemin,clip_valuemax,name)讲一个张量t限制在一个范围内(valuemin,valuemax),
# tf.log 求对数,对所有张量求
# tf.matmul 是矩阵乘法和‘*’是矩阵对应元素的乘法的区别
# tf.reduce_mean() 对整个矩阵做平均并不改变计算结果的意义
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, labels=y)  # 使用了softmax回归之后的交叉熵
mse = tf.resuce_mean(tf.square(y_ - y))  # 均方误差
#  也可以根据实际情况自定义损失函数
loss = tf.reduce_mean(tf.where(tf.greater(v1, v2), (v1 - v2) * a, (v2 - v1) * b))
# tf.greater()输入是两个张量返回较大的一个。
# tf.where()输入是三个条件,第一个是判断条件,判断选择条件为True则选择第二个输入,否则选第三个,而且tf.where都是在元素级别上进行



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值