Mam funkcję strat zaimplementowaną w TensorFlow, która oblicza błąd średniokwadratowy. Wszystkie tensory używane do obliczenia celu są typu float64, a zatem sama funkcja strat jest typu dtype float64. W szczególnościBłąd typu minimalizacji strat typu tensorflow
print cost
==> Tensor("add_5:0", shape=TensorShape([]), dtype=float64)
Jednak, kiedy próbują zminimalizować mogę uzyskać wartość błędu w odniesieniu do typu tensora:
GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
==> ValueError: Invalid type <dtype: 'float64'> for add_5:0, expected: [tf.float32].
Nie rozumiem dlaczego oczekiwany dtype tensora jest pojedyncza precyzja zmienna, gdy wszystkie zmienne poprzedzające obliczenia są typu float64. Potwierdziłem, że kiedy przymuszam wszystkie zmienne do float32, obliczenia są wykonywane poprawnie.
Czy ktoś ma wgląd w to, dlaczego tak się dzieje? Mój komputer to maszyna 64-bitowa.
Oto przykład, który powiela zachowanie
import tensorflow as tf
import numpy as np
# Make 100 phony data points in NumPy.
x_data = np.random.rand(2, 100) # Random input
y_data = np.dot([0.100, 0.200], x_data) + 0.300
# Construct a linear model.
b = tf.Variable(tf.zeros([1], dtype=np.float64))
W = tf.Variable(tf.random_uniform([1, 2], minval=-1.0, maxval=1.0, dtype=np.float64))
y = tf.matmul(W, x_data) + b
# Minimize the squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# For initializing the variables.
init = tf.initialize_all_variables()
# Launch the graph
sess = tf.Session()
sess.run(init)
# Fit the plane.
for step in xrange(0, 201):
sess.run(train)
if step % 20 == 0:
print step, sess.run(W), sess.run(b)
Zrozumiano! Dzięki! – user1936768
Doens't wydaje się działać teraz (tf v0.6). 'TypeError: Wejście 'alpha' z 'ApplyGradientDescent' Op ma typ float32, który nie pasuje do typu float64 z argumentu 'var'. – colinfang
Dzięki za wskazanie tego. Poprawiłem odpowiedź poprawką. – mrry