Файл чтения тензорного потока с 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

0 ответов

Другие вопросы по тегам