Ошибка передачи данных в случайное время
Я застрял в очень странной проблеме в течение длительного времени. Это моя проблема - у меня есть файл 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, он работает нормально все время. Я действительно не знаю, в чем здесь проблема.
Заранее спасибо. Пожалуйста, прокомментируйте, если нужно больше объяснений с моей стороны.