Я новичок в тензорном потоке, и я хочу вычислить среднее значение из каждой строки из тензора. Для этого Tensorflow выполняет операцию tf.reduce_mean. Проблема заключается в том, что когда строка имеет значение nan, среднее значение для этой строки также является наном. Кроме того, я хочу реализовать это самостоятельно, чтобы лучше понять философию, основанную на тензорном потоке. Итак, как я мог реализовать это вручную? Код, который я написал:
import tensorflow as tf
import numpy as np
ratings = np.array([[7, 6, 7, 4, 5, 4], [6, 7, np.NaN, 4, 3, 4], [np.NaN, 3, 3, 1, 1, np.NaN],
[1, 2, 2, 3, 3, 4], [1, np.NaN, 1, 2, 3, 3]], dtype = np.float16)
tRatings = tf.convert_to_tensor(ratings, dtype = np.float16)
means = tf.get_variable("means", shape=(5), dtype=tf.float16)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
mean = tf.reduce_mean(tRatings, axis=1)
print(sess.run(mean))
import tensorflow as tf
import numpy as np
ratings = np.array([[7, 6, 7, 4, 5, 4], [6, 7, np.NaN, 4, 3, 4], [np.NaN, 3, 3, 1, 1, np.NaN],
[1, 2, 2, 3, 3, 4], [1, np.NaN, 1, 2, 3, 3]], dtype = np.float16)
tRatings = tf.convert_to_tensor(ratings, dtype = np.float16)
means = tf.get_variable("means", shape=(5), dtype=tf.float16)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#mean = tf.reduce_mean(tRatings, axis=1)
tRatings_wonan=tf.where(tf.is_nan(tRatings), tf.zeros_like(tRatings), tRatings)
sum = tf.reduce_sum(tRatings_wonan,axis=1)
count_nans = tf.reduce_sum(tf.cast(tf.is_nan(tRatings), tf.float16),axis=1)
mean = tf.div(sum,tf.subtract(tf.cast(tf.shape(tRatings)[1], tf.float16),count_nans))
print(sess.run(mean))