Мне нужна помощь с этим проектом TensorFlow. Я хотел бы перепрограммировать что-то вроде Pix2Pix. Я столкнулся с некоторыми проблемами, особенно при чтении изображений и определении графика TensorFlow. Но сначала я создал папку («Source /»), в которой есть много картинок разных размеров. Теперь CNN обучают превращать изображение «.jpg» в изображение «.JPG». «Jpg» и «JPG» имеют одинаковую высоту, ширину и глубину (RGB). Тем не менее, «JPG» отличается по своей структуре от «JPG» (как и в Pix2Pix). Я думаю, что мои проблемы возникают во время обучения, и у меня есть «неправильный» график TensorFlow (тот, который должен быть улучшен). Вот мой текущий код:
import os
import tensorflow as tf
import tensorflow.contrib.layers as lays
from random import shuffle
learnrate = 0.1
batch_size = 32
Source = "Source/"
files = []
for file in os.listdir(Source):
if file.endswith(".jpg"):
files.append(Source + file)
shuffle(files)
filenames = tf.constant(files)
safe_name = "test"
data = tf.data.Dataset.from_tensor_slices((filenames,filenames))
data = data.map(parse)
data = data.batch(batch_size)
def autoencoder(inputs):
# encoder
net = lays.conv2d(inputs, 3, [5, 5], stride=1, padding='SAME')
net = lays.conv2d(net, 6, [5, 5], stride=2, padding='SAME')
net = lays.conv2d(net, 12, [5, 5], stride=4, padding='SAME')
# decoder
net = lays.conv2d_transpose(net, 12, [5, 5], stride=4, padding='SAME')
net = lays.conv2d_transpose(net, 6, [5, 5], stride=2, padding='SAME')
net = lays.conv2d_transpose(net, 3, [5, 5], stride=1, padding='SAME', activation_fn=tf.nn.tanh)
return net
print(files)
ae_inputs = tf.placeholder(tf.float32, (None, 480, 270, 3))
ae_outputs = autoencoder(ae_inputs)
loss = tf.reduce_mean(tf.square(ae_outputs - ae_inputs))
train_op = tf.train.AdamOptimizer(learning_rate=learnrate).minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
saver = tf.train.Saver()
for x in range(0, 1000):
iterator = data.make_one_shot_iterator()
images, labels = iterator.get_next()
sess.run(init)
sess.run([images, labels])
file_path = os.path.dirname(os.path.abspath(__file__)) + "/data/" + str(safe_name) + ".ckpt"
saver.save(sess, file_path)
print("Safe File! - Training done!")
def parse(filename,filenames):
image_string = tf.read_file(filename)
image_decoded = tf.image.decode_jpeg(image_string, channels=3)
image = tf.cast(image_decoded, tf.float32)
label_string = tf.read_file(filename.replace(".jpg", ".JPG"))
label_decoded = tf.image.decode_jpeg(label_string, channels=3)
label = tf.cast(label_decoded, tf.float32)
return image, label
Что я могу сделать, чтобы улучшить свои результаты? И что я на самом деле сделал неправильно при определении графика / остальной части кода? Возможно, есть хорошо понятный пример, когда кто-то запрограммировал Pix2Pix в TensorFlow и в котором вы также можете использовать свои собственные изображения?