Python 为并行实例生成相同的随机tensorflow操作序列

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

我正试图为一个图像分割任务编写自己的数据生成器,以便更好地控制我可以应用的转换。首先,我正在编写一个玩具生成器,它使用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

%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谢谢,我已经修复了它。