Python 为并行实例生成相同的随机tensorflow操作序列
我正试图为一个图像分割任务编写自己的数据生成器,以便更好地控制我可以应用的转换。首先,我正在编写一个玩具生成器,它使用tf.image.random_crop输出随机裁剪的图像:Python 为并行实例生成相同的随机tensorflow操作序列,python,tensorflow,random,Python,Tensorflow,Random,我正试图为一个图像分割任务编写自己的数据生成器,以便更好地控制我可以应用的转换。首先,我正在编写一个玩具生成器,它使用tf.image.random_crop输出随机裁剪的图像: import tensorflow as tf import tensorflow.keras.preprocessing.image as k_img import os import numpy as np import matplotlib import matplotlib.pyplot as plt %ma
import tensorflow as tf
import tensorflow.keras.preprocessing.image as k_img
import os
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
class DataGen:
seed=1
def __init__(self,seed=1):
self.seed = seed
def flow(self):
#tf.random.set_seed(self.seed)
img = np.asarray(k_img.load_img('data/train/images/all/image.png',color_mode='grayscale'))
while(True):
img_crop = tf.image.random_crop(img,(32,32),seed=self.seed)
yield img_crop
用例如下所示:
gen = DataGen(1234).flow()
gen2 = DataGen(1234).flow()
fig = plt.figure()
#gen
plt.subplot(2,2,1)
plt.imshow(next(gen))
plt.subplot(2,2,2)
plt.imshow(next(gen))
#gen2
plt.subplot(2,2,3)
plt.imshow(next(gen2))
plt.subplot(2,2,4)
plt.imshow(next(gen2))
所需的行为是图像1和3相同,图像2和4相同。但是,在此上下文中设置tf.image.random_crop中的种子并不能做到这一点——不会重复任何操作。设置tf.random.set_seed(注释掉)会强制执行一个可重复的序列,但它是全局的,而不是局部的
如何实现所需的行为?您缺少一些代码,例如
将tensorflow导入为tf
和gen=DataGen(1234).flow()
。你能添加你所有的代码以保证再现性,并确保它自己工作(当然,如果指定的路径上有图像的话)。@JayMody谢谢,我已经修复了它。