Ошибка передачи данных в случайное время

Я застрял в очень странной проблеме в течение длительного времени. Это моя проблема - у меня есть файл tfrecords (name = "Input.tfrecords"), из которого я читаю данные, а затем делаю некоторую модификацию данных и сохраняю их в другом файле tfrecords (name = "Output.tfrecods"). Ниже приведен фрагмент кода -

tf.reset_default_graph()
config = tf.ConfigProto()
config.gpu_options.allow_growth = True


def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))


def _str_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value.encode('utf-8')]))


def _float_feature(value):
    return tf.train.Feature(float_list=tf.train.FloatList(value=value.reshape(-1)))


def _int64_feature(value):
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))


def som_function(FLAGS):
    with tf.Graph().as_default() as g:

        tfr_writer = tf.python_io.TFRecordWriter(FLAGS.Output_tfrdatafile)

        dataset = tf.data.TFRecordDataset(FLAGS.Input_tfrdatafile)

        dataset = dataset.map(lambda x: reader.initial_parser(x, FLAGS.HEIGHT, FLAGS.WIDTH))

        dataset = dataset.batch(FLAGS.BATCH_SIZE)
        iterator = dataset.make_one_shot_iterator()

        images, original_ig, img_name = iterator.get_next()


        org_batch = tf.Variable(tf.random_normal([FLAGS.BATCH_SIZE, FLAGS.HEIGHT, FLAGS.WIDTH, 3]), trainable=False)
        initial = tf.Variable(tf.random_normal([FLAGS.BATCH_SIZE, FLAGS.HEIGHT, FLAGS.WIDTH, 3]))
        org_batch_assign_op = org_batch.assign(original_ig)

        initial_assign_op = initial.assign(images)

        total_loss = #someloss function



        train_op = tf.train.MomentumOptimizer(FLAGS.LEARNING_RATE, momentum=0.95, use_nesterov=True,
                                              name="non_paraopt_SGD").minimize(total_loss,
                                                                               global_step=global_step)


        init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())

        with tf.Session(config=config) as sess:
            sess.run(init_op)
            start_time = time.time()
            batches_count = 0
            while True:
                try:
                    _, _, image_names = sess.run([initial_assign_op,org_batch_assign_op,  img_name])

                    //some code that updates initial variable

                    org_batch = tf.cast(org_batch, tf.uint8)
                    image_t, org_image_t = sess.run([initial, org_batch])

                    if not FLAGS.addNetworklose:
                        lambda_val = np.zeros(image_t.shape).astype(np.float32)

                    for i in range(image_t.shape[0]):
                        filename = str(image_names[i], 'utf-8')

                        example = tf.train.Example(features=tf.train.Features(feature={
                                'file_name': _str_feature(filename),
                                'float_image': _float_feature(image_t[i] + reader.mean_pixel),
                                'image_raw': _bytes_feature(org_image_t[i].tostring()),
                                'lambda_image': _float_feature(lambda_val[i])
                            }))
                        tfr_writer.write(example.SerializeToString())

                    batches_count = batches_count + 1
                except tf.errors.OutOfRangeError:
                    print("final time elspased", (time.time() - start_time))
                    print('Done doing non paramteric part')
                    break

            tfr_writer.close()

Я всегда успешно создаю "Output.tfrecods". Но всякий раз, когда я читаю файл "Output.tfrecods", я случайно получаю ошибку Dataloss.

Я должен перезапустить мою систему и перезапустить приведенный выше код 5-6 раз, а затем он работает нормально. И когда я запускаю один и тот же код на другой машине с Linux, он работает нормально все время. Я действительно не знаю, в чем здесь проблема.

Заранее спасибо. Пожалуйста, прокомментируйте, если нужно больше объяснений с моей стороны.

0 ответов

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