Python 3.x 错误:无法在跨副本上下文中调用apply_gradients()。使用TPUStrategy时,使用tf.distribute.Strategy.run输入副本上下文

Python 3.x 错误:无法在跨副本上下文中调用apply_gradients()。使用TPUStrategy时,使用tf.distribute.Strategy.run输入副本上下文,python-3.x,tensorflow,keras,generative-adversarial-network,tpu,Python 3.x,Tensorflow,Keras,Generative Adversarial Network,Tpu,我正在尝试将一个模型更改为在colab中使用googlecloudtpus。我正在尝试运行的代码已存在。我将只在此处发布修改后的代码,我已按照此处的说明进行了操作: 在顶部: resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='') tf.config.experimental_connect_to_cluster(resolver) tf.tpu.experimental.initialize_tpu_system

我正在尝试将一个模型更改为在colab中使用googlecloudtpus。我正在尝试运行的代码已存在。我将只在此处发布修改后的代码,我已按照此处的说明进行了操作:

在顶部:

resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='')
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.TPUStrategy(resolver)
然后修改生成器、鉴别器和暹罗网络的构建功能

def build_generator(input_shape):
  with strategy.scope():
    h,w,c = input_shape
    inp = Input(shape=input_shape)
    #downscaling
    g0 = tf.keras.layers.ZeroPadding2D((0,1))(inp)
    g1 = conv2d(g0, 256, kernel_size=(h,3), strides=1, padding='valid')
    g2 = conv2d(g1, 256, kernel_size=(1,9), strides=(1,2))
    g3 = conv2d(g2, 256, kernel_size=(1,7), strides=(1,2))
    #upscaling
    g4 = deconv2d(g3,g2, 256, kernel_size=(1,7), strides=(1,2))
    g5 = deconv2d(g4,g1, 256, kernel_size=(1,9), strides=(1,2), bnorm=False)
    g6 = ConvSN2DTranspose(1, kernel_size=(h,1), strides=(1,1), kernel_initializer=init, padding='valid', activation='tanh')(g5)
    opt_gen = Adam(0.0001, 0.5)
  return Model(inp,g6, name='G'), opt_gen

#Siamese Network
def build_siamese(input_shape):
  with strategy.scope():
      h,w,c = input_shape
      inp = Input(shape=input_shape)
      g1 = conv2d(inp, 256, kernel_size=(h,3), strides=1, padding='valid', sn=False)
      g2 = conv2d(g1, 256, kernel_size=(1,9), strides=(1,2), sn=False)
      g3 = conv2d(g2, 256, kernel_size=(1,7), strides=(1,2), sn=False)
      g4 = Flatten()(g3)
      g5 = Dense(vec_len)(g4)
  
      return Model(inp, g5, name='S')

#Discriminator (Critic) Network
def build_critic(input_shape):
  with strategy.scope():
      h,w,c = input_shape
      inp = Input(shape=input_shape)
      g1 = conv2d(inp, 512, kernel_size=(h,3), strides=1, padding='valid', bnorm=False)
      g2 = conv2d(g1, 512, kernel_size=(1,9), strides=(1,2), bnorm=False)
      g3 = conv2d(g2, 512, kernel_size=(1,7), strides=(1,2), bnorm=False)
      g4 = Flatten()(g3)
      g4 = DenseSN(1, kernel_initializer=init)(g4)
      opt_disc = Adam(0.0001, 0.5)
      return Model(inp, g4, name='C'), opt_disc
最后,在train_all()和train_d函数中,我将梯度和优化器放在strategy.scope()下

当我执行列车功能时,我得到以下错误:

RuntimeError: `apply_gradients() cannot be called in cross-replica context. Use `tf.distribute.Strategy.run` to enter replica context.
我会非常感谢你们的帮助

RuntimeError: `apply_gradients() cannot be called in cross-replica context. Use `tf.distribute.Strategy.run` to enter replica context.