в Tensorflow 1.X Керас не может быть обучен с tf.data? - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу использовать библиотеку tf.data для тренировки скорости.

Но мой код, подними сообщение об ошибке, вроде как сильфон.

File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py", line 727, in fit
use_multiprocessing=use_multiprocessing)
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 675, in fit
steps_name='steps_per_epoch')
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 169, in model_iteration
ins = _prepare_feed_values(model, inputs, targets, sample_weights, mode)
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 535, in _prepare_feed_values
extract_tensors_from_dataset=True)
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py", line 2471, in _standardize_user_data
exception_prefix='input')
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_utils.py", line 517, in standardize_input_data
standardize_single_array(x, shape) for (x, shape) in zip(data, shapes)
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_utils.py", line 517, in <listcomp>
standardize_single_array(x, shape) for (x, shape) in zip(data, shapes)
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_utils.py", line 442, in standardize_single_array
if (x.shape is not None and len(x.shape) == 1 and
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/tensor_shape.py", line 827, in __len__
raise ValueError("Cannot take the length of shape with unknown rank.")
ValueError: Cannot take the length of shape with unknown rank.

Я не знаю, почему и как я могу это исправить. Мой код набора данных как сильфон.

def _py_parse_line(line):
    line = line.decode('utf-8')
    parsed_line = line.split("\t")
    label = int(parsed_line[0])
    rawSentence = str(parsed_line[1])
    morphemePOS = str(parsed_line[2])
    NE_LIST = str(parsed_line[3])

    preprocessedDatum = FTV.featureToVectorLexMorpDictNElist(
        [rawSentence], [morphemePOS], [NE_LIST]
    )

    syllable_feature = preprocessedDatum[0][0]
    sdiDict_feature = preprocessedDatum[1][0]
    morphemePos_feature = preprocessedDatum[2][0]
    neDict_feautre = preprocessedDatum[3][0]

    return syllable_feature, sdiDict_feature, morphemePos_feature, neDict_feautre, label


def _decode_tsv(line):

    type_list = [tf.int32, tf.int8, tf.int32, tf.int8, tf.int64]
    data_list = tf.py_func(_py_parse_line, [line], type_list)

    label = data_list[4]
    features = {"lexical_input": data_list[0],
                "dictInfo_input": data_list[1],
                "morphemePos_input": data_list[2],
                "ne_input": data_list[3]
                }
    d = features, label
    return d


dataset = tf.data.TextLineDataset("/root/Workspace/ias_sdi_trainer/generatedModel/sdi_nugu.dtg.wholeData.txt")
dataset = dataset.shuffle(4096)
dataset = dataset.map(_decode_tsv)
dataset = dataset.batch(batchSize )
dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE)

Я видел внутри тензора с "make_oneshot_iterator ()" и tf.Session. Были данные, что я думаю.

enter image description here

Я тоже задавался этим вопросом. Но это не может помочь мне. Невозможно взять длину Shape с неизвестным рангом

Есть ли хороший способ использовать tf.data для кератов? Я хочу использовать данные из текстовой строки в tf.data

Добавлено

Моя версия тензорного потока - 1.14. Я использовал набор данных в форме, как сильфон.

sdi_model.fit(dataset, epochs=MAX_EPOC)

Я также использовал набор данных с генератором. Код как мехи.

dataFetcher = dataset.make_one_shot_iterator()

def gen(dataFetcher):
    with tf.Session() as sess:
        while True:
            next_elem = dataFetcher.get_next()
            x_batch,y_batch = sess.run(next_elem)
            yield x_batch, y_batch

sdi_model.fit_generator(gen(dataFetcher), steps_per_epoch=100, epochs=MAX_EPOC)

С генератором я получил сообщение об ошибке "sess is empty graph"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...