Ich möchte eine Vorhersagefunktion mit Tensorflow in R implementieren, aber das Vorhersageergebnis ist immer das gleiche, egal was die Eingabeparameter sind.Tensorflow liefert die gleichen Ergebnisse für verschiedene trainierte Eingabeparameter
Ich habe versucht, ganz in der Nähe des offiziellen tutorial zu bleiben.
Meine Trainingsdaten sind in einem Datenrahmen von 7 Variablen geformt. Der erste ist das Ergebnis. Das Ergebnis ist entweder 0 oder 1.
Mein vollständiger Code ist:
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
}
Und eine einfache Prüfung mit den ersten Elementen der Trainingsdatum
# 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])
}
ich erwartete, dass die Vorhersage von abhängt auf der Eingabe, aber es gibt zurück:
[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
Was habe ich falsch gemacht?
Danke,
Bastian
Ich habe versucht, W mit 'tf $ random_normal 'zu initialisieren, aber das Problem ist immer noch da. – user2667549