Python tf神经网络二分类,最后结果都是一样的

  统计/机器学习 计算机视觉 Python 人工神经网络 TensorFlow    浏览次数:4334        分享
0

神经网络input是140个样本 1296维度的特征值,label前60是[1.0, 0.0] 后面是[0.0, 1.0],想来实现二分类,可是我用softmax交叉熵+L2正则化,训练出来的output全是一个相同的1*2矩阵。


有没有大神可以看出来错在哪里  T_T

    xs = tf.placeholder(tf.float32,shape=(None, 36*36))
    ys = tf.placeholder(tf.float32,shape=(None,2))

    layer1_node = 150 # 第一层隐含层神经元个数

    # first layer inference
    L1_Weights = tf.Variable(tf.random_normal([36*36,layer1_node], stddev=0.1, seed=1))
    L1_biases = tf.Variable(tf.zeros([1,layer1_node]) + 0.1)
    L1_out = tf.matmul(xs, L1_Weights) + L1_biases

    L1_out = tf.nn.relu(L1_out)

    # second layer inference
    L2_Weights = tf.Variable(tf.random_normal([layer1_node,2], stddev=0.1, seed=1))
    L2_biases = tf.Variable(tf.zeros([1,2]) + 0.1)
    out = tf.matmul(L1_out, L2_Weights) + L2_biases

    # cross entropy
    out_pro = tf.nn.log_softmax(out)
    cross_entropy = -tf.reduce_sum(ys*out_pro)
    cross_entropy_mean = tf.reduce_mean(cross_entropy)

    # regularization
    regularizer = tf.contrib.layers.l2_regularizer(0.1)
    regularization = regularizer(L1_Weights) + regularizer(L2_Weights)

    # loss
    loss = cross_entropy_mean + regularization

    # backward
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)  # 基础梯度下降法
    init = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init)
        for i in range(20000):
            sess.run(train_step,feed_dict={xs:recon_imgs,ys:label})
            if i % 50 == 0:
                print(sess.run(loss,feed_dict={xs:recon_imgs,ys:label}))
               
        print(sess.run(out,feed_dict={xs:recon_imgs,ys:label}))


output:[[-0.09252657 0.29252994],…… 全是一样的。。


梯度下降试着用过动量法,但是不收敛。。

 

mmmm_PNU   2018-12-07 10:23



   3个回答 
0

试试调一调learning rate吧,然后你只用一层的结构试试看,debug一下

SofaSofa数据科学社区DS面试题库 DS面经

Marvin_THU   2018-12-07 11:59

好的! 我先试试! 谢谢!! - mmmm_PNU   2018-12-07 12:47
0

虽然还没找到错误出在哪,但是先记录下:

1. 把隐含层去掉后,即只有输入层和输出层,output能看的出来有分类,错误可能是出在了hidden_layer上,但是还没有找出来到底在哪。


2. 正则化0.1太小了 可能找不到最优 我调成0.8之后就对了

SofaSofa数据科学社区DS面试题库 DS面经

mmmm_PNU   2018-12-07 13:29

0

有可能是l2_regularizer的参数太大了,Loss主要由regularization控制。因为你第一层的L1_weights个数36*36*150远大于L2_weights个数150*2,去掉L1后regularization急剧下降,LOSS由cross entropy控制。

你最好把两种配置的cross entropy和regularization都显示出来。

SofaSofa数据科学社区DS面试题库 DS面经

Zealing   2018-12-12 02:41

好的! 谢谢~ - mmmm_PNU   2018-12-12 19:23


  相关讨论

tensorflow里出现的strides是什么意思

tf.placeholder(tf.float32, shape=(None, 1024))中的None是什么意思

一维数据怎么输入卷积网络。

yolov3-tiny一个maxpool层算出的结果为什么和pytorch上的公式不一样

深入了解神经网络

CNN中的感受野是什么意思?

卷积层的padding一般都是零吗?

卷积层、池化层和droput层的前后顺序是什么?

yolo v4和yolo v3的主要区别是什么?

BatchNormalization

  随便看看

python怎么对list中的元素做连乘?

dataframe每行或者每列中缺失值(na, nan, null)的个数

怎么从矩母函数(mgf)推导得到概率密度函数(pdf)?

pandas把一列日期转换为星期

pandas同时返回一个dataframe的前几行(head)和后几行(tail)