Файл чтения тензорного потока с decode_csv и заменой нулевой строки значением по умолчанию 0
В следующем примере набора данных 'trial.data' один объект (feature4) получил значение null в качестве значения по умолчанию, которое должно быть 0(целочисленный тип). Как я могу заменить ноль на 0 и создать тензор int32? Следующий код дает эту ошибку "Поле 4 в записи 0 не является действительным int32: null"
import tensorflow as tf
import numpy as np
_CSV_COLUMNS = ['feature1', 'feature2', 'feature3', 'feature4','label']
bigint = tf.constant([0], dtype=tf.int64)
_CSV_COLUMN_DEFAULTS = [[0], [0], [''], bigint, [0]]
#this one is not giving an error
#_CSV_COLUMN_DEFAULTS = [[0], [0], [''], bigint, ['']]
def input_fn(data_file, num_epochs, shuffle, batch_size):
assert tf.gfile.Exists(data_file), (
'%s not found. Please make sure you have either run data_download.py or '
'set both arguments --train_data and --test_data.' % data_file)
def parse_csv(value):
print('Parsing', value)
columns = tf.decode_csv(value, record_defaults=_CSV_COLUMN_DEFAULTS)
features = dict(zip(_CSV_COLUMNS, columns))
print(features)
labels = features.pop('label')
return features, labels
dataset = tf.data.TextLineDataset(data_file)
dataset = dataset.map(parse_csv, num_parallel_calls=5)
dataset = dataset.repeat(num_epochs)
dataset = dataset.batch(batch_size)
iterator = dataset.make_one_shot_iterator()
features, labels = iterator.get_next()
return features, labels
train_epoch = 40
batch_size = 40
features, labels = input_fn("trial.data", train_epoch, True, batch_size)
print(labels)
sess = tf.Session()
print(sess.run([features, labels]))
и образец небольшого набора данных с именем trial.data
1,2,rt,4,null
1,45,ht,4,5
1,78,uy,4,null