Я работаю над TensorFlow (1.13.1) для обучения классификатора DNN, я новичок в TensorFlow и застрял на ошибке для ряда классов.
Примечание: Я много гуглил и нахожу два решения, например упомяну количество классов, и я применил эти решения, но не смог решить свою проблему, поэтому не помечайте это как дублированный, пожалуйста !
Вот что я пробовал до сих пор:
CSV_COLUMNS = 'ALL_COLUMNS'.split(',')
LABEL_COLUMN = 'class'
DEFAULTS = [[0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0], [0.0]]
input
Функция:
def reade_dataset(file_name, mode, batch_size = 512):
def _input_fn():
# attributes = None
# label = None
def decode_csv(value_column):
# TODO #1: Use tf.decode_csv to parse the provided line
columns = tf.decode_csv(value_column, record_defaults=DEFAULTS)
# TODO #2: Make a Python dict. The keys are the column names, the values are from the parsed data
features = dict(zip(CSV_COLUMNS, columns))
# TODO #3: Return a tuple of features, label where features is a Python dict and label a float
label = features.pop(LABEL_COLUMN)
print(label)
return features, label
file_list = None
file_list = tf.gfile.Glob(file_name)
dataset = (tf.data.TextLineDataset(file_list).map(decode_csv))
num_epochs = None
if mode == tf.estimator.ModeKeys.TRAIN:
num_epochs = None
dataset = dataset.shuffle(buffer_size=10*batch_size)
else:
num_epochs = 1
dataset = dataset.repeat(num_epochs).batch(batch_size)
return dataset.make_one_shot_iterator().get_next()
return _input_fn
У меня есть два класса как [2, 4]
train_and_evaluate:
def train_and_evaluate(output_dir):
EVAL_INTERVAL = 300
run_config = tf.estimator.RunConfig(save_checkpoints_secs=EVAL_INTERVAL, keep_checkpoint_max=3)
estimator = tf.estimator.DNNClassifier(model_dir=output_dir,
feature_columns=get_cols(),
hidden_units=[1024, 512, 256],
n_classes=2,
config=run_config)
train_spec = tf.estimator.TrainSpec(input_fn=reade_dataset('train.csv', tf.estimator.ModeKeys.TRAIN), max_steps=1000)
exporter = tf.estimator.LatestExporter('exporter', _serving_input_fn)
eval_spec = tf.estimator.EvalSpec(input_fn=reade_dataset('eval.csv', tf.estimator.ModeKeys.EVAL),
steps=None,
start_delay_secs=60,
throttle_secs=EVAL_INTERVAL,
exporters=exporter)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
Вот ошибка, которую я получаю:
InvalidArgumentError: утверждение не выполнено: [Метки должны <= n_classes - 1]
[Условие x <= y не содержало поэлементно: x (dnn / head / tags: 0) =]
[[2] [4] [2] ...] [y (dnn / head / assert_range / Const: 0) =] [1] [[узел
DNN / голова / assert_range / assert_less_equal / Утверждай / AssertGuard / Утверждай
(определяется в
/usr/local/lib/python3.6/dist-packages/tensorflow_estimator/python/estimator/canned/head.py:1561)
]] </p>