【发布时间】:2021-12-28 12:28:22
【问题描述】:
我想在我的网络中使用具有特定概率的不同层。层是以下类。
class plus1(keras.layers.Layer):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def call(self, X):
return X + 1
def compute_output_shape(self, batch_input_shape):
return batch_input_shape
class plus2(keras.layers.Layer):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def call(self, X):
return X + 2
def compute_output_shape(self, batch_input_shape):
return batch_input_shape
class plus3(keras.layers.Layer):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def call(self, X):
return X + 3
def compute_output_shape(self, batch_input_shape):
return batch_input_shape
网络如下图。
def f1():
return plus1()
def f2():
return plus2()
def f3():
return plus3()
def simple_model(input_num):
input_layer = Input(input_num)
rand = tf.random.uniform((1,), minval=0, maxval=3, dtype=tf.int32)
r = tf.switch_case(rand[0], branch_fns={0: f1, 1: f2, 2: f3})
res = r(input_layer)
model = Model(inputs=input_layer, outputs=res)
return model
model = simple_model([1,])
每次我运行下面的代码时,我都会得到相同的输出,但我预计会有不同的输出。 有什么方法可以实现吗?
model.predict([1])
>>> array([[4.]], dtype=float32)
【问题讨论】:
-
你的 Tensorflow 版本是什么?我用 Tensorflow 2.4.1 测试了你的代码,脚本按预期运行。
-
使用
simple_model函数构建模型时会选择随机层。模型建立后,它的层不再改变,这就是为什么model.predict([1])总是返回相同的输出。如果您希望model.predict([1])返回不同的输出,您需要每次都重新构建模型。即你需要运行model = simple_model([1, ]); model.predict([1])而不仅仅是model.predict([1])。 -
我不想每次都重建模型。那么你的意思是没有任何方法可以让模型在每批中选择不同的功能/层? @FlaviaGiammarino
标签: python tensorflow keras layer