美文网首页
用神经网络解决二分类问题

用神经网络解决二分类问题

作者: 陶大明 | 来源:发表于2018-05-17 20:58 被阅读16次
    import tensorflow as tf
    from numpy.random import RandomState
    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')
    a=tf.matmul(x,w1)
    y=tf.matmul(a,w2)
    cross_entropy=-tf.reduce_mean(
        y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
    train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
    
    rdm=RandomState(1)
    dataset_size=128
    X=rdm.rand(dataset_size,2)
    Y=[[int(x1+x2<1)]for (x1,x2) in X]
    with  tf.Session() as sess:
        init_op=tf.initialize_all_variables()
        sess.run(init_op)
        print(sess.run(w1))
        print(sess.run(w2))
    
    [[-0.8113182   1.4845988   0.06532937]
     [-2.4427042   0.0992484   0.5912243 ]]
    [[-0.8113182 ]
     [ 1.4845988 ]
     [ 0.06532937]]
    
    
    STEPS = 500
        for i in range(STEPS):
            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 step(s),cross entropy on all data is %g" % (i, total_cross_entropy))
            print(sess.run(w1))
            print(sess.run(w2))
    [[-1.9618274  2.582354   1.6820377]
     [-3.4681718  1.0698233  2.11789  ]]
    [[-1.8247149]
     [ 2.6854665]
     [ 1.418195 ]]
    

    在运行这一块代码地过程中遇到的问题 :
    1.RuntimeError: Attempted to use a closed Session.
    如果“STEPS=500”与“with tf.Session() as sess1:”对齐就会有这样的提示。
    解决办法:把“STEPS=500”及以下的code整体向后移。
    全选,按Tab键即可
    2.ValueError: No gradients provided for any variable
    报错信息的意思是,提供给minimize函数的var_list参数中的变量没有梯度,需要检查你的图的操作是否在这些变量中支持梯度。
    经过检查,发现优化器指定的loss参数中,与var_list参数中的变量无任何关系导致了上述错误,因此,需要检查loss和var_list两个参数的关联性,确保loss由指定的var_list中的变量来计算
    也就是之前变量名称可能有错误,改回来就是了
    3.变量没被定义的问题
    刚开始是看到我一脸懵,因为出错的那行代码是我正在定义的那行 ,然后看不出错误,最终发现那个其实就是因为上一行 代码搞错掉楼,所以如果那行代码错了,不要局限,请全面发展的眼光看问题
    4.如何在Pycharm里接着运行部分代码(运行了一部分 再运行一部分,新手小白
    琢磨了半天)
    琢磨了半天的结果是没琢磨出来,看到这篇文章的大佬可以告诉我一下吗?有人告诉我就是不可以,可是我不信,不信,
    5.每隔一段时间计算交叉熵并输出,这个我一直就没输出结果,也不知道是哪里出现了问题,,,,,没解决
    刚刚已经解决了,怕是个傻子,i 写成了1 ,有结果才怪的
    6.最后输出参数时,一下子给我输出了好多个结果,虽然迭代最后结果是正确的吧,以后可以省事点
    7.Debug 是修正错误的意思

    相关文章

      网友评论

          本文标题:用神经网络解决二分类问题

          本文链接:https://www.haomeiwen.com/subject/savbdftx.html