您可以使用回调在每个时期(或批次)结束时调用一个函数,该函数每次都会生成一个新的随机数。阅读有关回调的模式及其提供的选项here。
您可以在函数内部将 xx 设置为全局。
- Rand_int 在每个 epoch 结束时生成
- 在 rand_int 上运行某些条件,并且 xx 是更新
- xx 是一个全局变量,在每个 epoch 结束时不断更新
- xx 的最终值在训练结束时返回给变量 xx。
import tensorflow as tf
from tensorflow.keras import layers, Model, callbacks
xx = 0
class CustomCallback(callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
rand_int = tf.random.uniform((1,), 0, 1)
global xx
if rand_int < 0.5:
xx = -4999
if rand_int > 0.5:
xx = 4999
print(rand_int.numpy()[0], xx)
X, y = np.random.random((10,5)), np.random.random((10,))
inp = layers.Input((5,))
x = layers.Dense(3)(inp)
x = layers.Dense(3)(x)
out = layers.Dense(1)(x)
model = Model(inp, out)
model.compile(loss='MAE', optimizer='adam')
model.fit(X,y,callbacks=[CustomCallback()], epochs=3, verbose=1)
print('')
print('random function output, final state:',xx)
Epoch 1/3
1/1 [==============================] - 0s 248ms/step - loss: 1.6208
0.53797233 4999
Epoch 2/3
1/1 [==============================] - 0s 5ms/step - loss: 1.6057
0.64474905 4999
Epoch 3/3
1/1 [==============================] - 0s 3ms/step - loss: 1.5907
0.05995667 -4999
random function output, final state: -4999
如您所见,rand_int 导致 xx 根据每个时期的函数改变值。并返回 xx 的最终状态。