2017-02-04 33 views
6

Tensorflow'da konvolüsyonel bir ağ üzerinde çalışıyorum ve bir sorunum var. Sorun, tfrecords aracılığıyla okuduğum giriş görüntüsünün belirli sayıda nan değeri içerdiği. Bunun nedeni, görüntünün içinde bazı sonsuz değerlere sahip bir derinlik eşlemini temsil etmesi ve bunu tfrecordda kodlama işleminde ve daha sonra net olarak beslemek için deşifre edilmesinin bu sonsuz değerler nan değerleri haline gelmesidir.Tensorflow tensöründeki nan değerlerini değiştirin

Şimdi, benim durumumda, tfrecor'larda kodlamadan önce orijinal görüntüdeki sonsuz değerleri değiştirmek bir seçenek değil, görüntü tensöründeki nan değerlerini değiştirmeden önce kullanmam gereken bir işlem var. ağa besle?

+0

I güvenilir 'input_clean = tf.map_fn (lamda x : x x ise x == x else 0.0, giriş) ', ama NaN'leri kaldırmaz ... Ve bu:' temizlenen = tf.map_fn (lambda x: 0.0 eğer matematik.isnan (x) else 2 * x , input) '- TypeError yükseltir: bir float gerekli '... –

cevap

13

tf.where ve tf.is_nan bir kombinasyonu çalışması gerekir: (TensorFlow 0.12.1 kullanılarak)

import tensorflow as tf 
with tf.Session(): 
    has_nans = tf.constant([float('NaN'), 1.]) 
    print(tf.where(tf.is_nan(has_nans), tf.zeros_like(has_nans), has_nans).eval()) 

Baskılar:

[ 0. 1.]