Tensorflow之nn 简单神经网络学习

本文介绍了在深度学习中如何构建一个两层神经网络来解决二分类问题。通过TensorFlow,作者展示了模型的构建过程,包括定义参数、构建损失函数和训练操作,并强调了学习速率的重要性。模型训练后,可以通过测试集的准确率来调整模型参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在深入研究深度学习,关于机器学习的基本知识就略过不说了,在深度学习里面,一些概念性的东西还是很好理解的,重点是如何利用已有的知识去构建一个合适解决实际问题的模型,然后用各种小trick去把参数调优。
试水阶段,为了训一个简单的二分类问题,搭了一个两层的神经网络

这里是不加bias的简单模型

def init_weight(shape):
    return tf.Variable(tf.random_normal(shape, stddev=0.01))

def model(X, w_h, w_o):
    h = tf.nn.sigmoid(tf.matmul(X, w_h))
    return tf.matmul(h, w_o)

注意tensorflow的结构是先构图(模型)再训练,所以需要先将图中的变量和结点声明清楚:

X = tf.placeholder("float", [None, 36])
Y = tf.placeholder("float", [None, 2])

w_h = init_weight([36, 16])
w_o = init_weight([16, 2])

py_x = model(X, w_h, w_o)

predict_op = tf.argmax(py_x,1)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y))
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost)

X为训练样本,Y为训练标签,w_h, w_o为模型中的参数。cost是交叉熵代价,可以设置不同的代价函数。train_op是训练过程中的下降梯度(参考概念back-propagation),当然有不同的下降方法可以使用,0.05是学习速率,这也是个很重要的参数。

模型和变量构建完之后,就可以开始训练了,需要启动session:

with tf.Session() as sess:
    tf.initialize_all_variables().run()

    for i in range(1000):
        for start, end in zip(range(0, len(trX), 128), range(128, len(trX)+1, 128)):
            sess.run(train_op, feed_dict={X: trX[start:end], Y: trY[start:end]})
        accu = np.mean(np.argmax(teY, axis=1) == sess.run(predict_op, feed_dict={X:teX}))

可以手动设置训练1000此停止,也可以根据validation accuracy的变化情况决定何时停止。trX,trY,teX,teY分别为载入数据后的训练集(样本,标签)和测试集(样本,标签)。可以通过观察测试集的准确率调整模型训练参数,也可以观察训练集准确率、代价函数(cost)等。详细的调试经验研究之后再更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值