【问题标题】:Tensorflow returns same results for different trained input parameterTensorFlow 针对不同的训练输入参数返回相同的结果
【发布时间】:2017-07-17 18:42:14
【问题描述】:

我想在R中用tensorflow实现一个predict函数,但是无论输入参数是什么,预测结果总是一样的。

我尽量与官方tutorial保持密切联系。

我的训练数据在 7 个变量的 data.frame 中形成。第一个是结果。结果是 0 或 1。

我的完整代码是:

sess <- tf$InteractiveSession()

x <- tf$placeholder(tf$float32, shape(NULL,6L))
y_ <- tf$placeholder(tf$float32, shape(NULL,2L))

W <- tf$Variable(tf$zeros(shape(6L, 1L)))
b <- tf$Variable(tf$zeros(shape(2L)))

sess$run(tf$global_variables_initializer())
y <- tf$nn$softmax(tf$matmul(x,W) + b)
cross_entropy <- tf$reduce_mean(-tf$reduce_sum(y_ * tf$log(y), reduction_indices=1L))
optimizer <- tf$train$GradientDescentOptimizer(0.5)
train_step <- optimizer$minimize(cross_entropy)

i = 1
while (i < (nrow(training_data)-20)) {
    print(i)
    batch_ys <- matrix(c(training_data[i:(i+19),1], abs(training_data[i:(i+19),1]-1)), nrow=20)
    batch_xs <- matrix(c(training_data[i:(i+19),2],training_data[i:(i+19),3],training_data[i:(i+19),4],training_data[i:(i+19),5],training_data[i:(i+19),6],training_data[i:(i+19),7]), nrow=20, ncol=6)

    sess$run(train_step, feed_dict = dict(x = batch_xs, y_ = batch_ys))
    i = i + 20
}

对训练数据的第一项进行简单检查

# Simple verification
for (j in 1:30){
    test_data <- c(training_data[j,2],training_data[j,3],training_data[j,4],training_data[j,5],training_data[j,6],training_data[j,7])
    test_data <- matrix(test_data, nrow = 1, ncol = 6)
    feed_dict = dict(x= test_data)
    print('############')
    print(sess$run(y,feed_dict)) # this is always the same
    print(training_data[j,1])   
}

我预计 的预测取决于输入,但它返回:

[1] "############"
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    2    2    4   74    5    2
      [,1]      [,2]
[1,] 0.0657808 0.9342192
[1] 1
[1] "############"
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    1    5   61    2    3
      [,1]      [,2]
[1,] 0.0657808 0.9342192
[1] 0
[1] "############"
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    3    2    6   85    5    4
      [,1]      [,2]
[1,] 0.0657808 0.9342192
[1] 0

我做错了什么?

谢谢,

巴斯蒂安

【问题讨论】:

    标签: r tensorflow prediction


    【解决方案1】:

    似乎问题出在这一行:

    W <- tf$Variable(tf$zeros(shape(6L, 1L)))
    

    当您用零初始化权重矩阵时,所有梯度也将为零。所以,即使经过一些训练迭代W 仍然是一个零矩阵。解决方案是使用小的随机值来初始化这个矩阵。

    【讨论】:

    • 我尝试用tf$random_normal初始化W,但问题依然存在。
    【解决方案2】:

    我想通了,为什么它不适用于数据。 代码运行良好,但输入数据没有在 0 和 1 之间缩放。

    我猜所有超过 1 的值都设置为 1(例如 32kg --> 1),因此 nnet 仅使用填充 1 的表进行训练。由于每个输出分类的输入值相同,因此结果是常数值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2013-03-04
      • 1970-01-01
      • 2017-10-16
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多