我在Keras中的神经网络学习了原始数据的表示。为了确切地了解它是如何学习的,我认为绘制每个训练批(或epoch)的数据并将其转换为视频将会很有趣。
我被如何在训练阶段得到我的模型的输出卡住了。
我想做这样的事情(伪代码):
epochs = 200
plt_outputs = []
for i in range(epochs):
model.fit(x_train,y_train, epochs = 1)
plt_outputs.append(output_layer(x_test))
其中output_layer是我感兴趣的神经网络层。之后我会使用plot_data来生成每个情节并将其转换为视频。(那部分我还不关心…)
但是我觉得这不是一个好的解决方案,而且我不知道如何得到每批的输出。对此有什么想法吗?
您可以自定义测试步骤中发生的事情,就像这个官方教程一样:
import tensorflow as tf
import numpy as np
class CustomModel(tf.keras.Model):
def test_step(self, data):
# Unpack the data
x, y = data
# Compute predictions
y_pred = self(x, training=False)
test_outputs.append(y_pred) # ADD THIS HERE
# Updates the metrics tracking the loss
self.compiled_loss(y, y_pred, regularization_losses=self.losses)
# Update the metrics.
self.compiled_metrics.update_state(y, y_pred)
# Return a dict mapping metric names to current value.
# Note that it will include the loss (tracked in self.metrics).
return {m.name: m.result() for m in self.metrics}
# Construct an instance of CustomModel
inputs = tf.keras.Input(shape=(8,))
x = tf.keras.layers.Dense(8, activation='relu')(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = CustomModel(inputs, outputs)
model.compile(loss="mse", metrics=["mae"], run_eagerly=True)
test_outputs = list() # ADD THIS HERE
# Evaluate with our custom test_step
x = np.random.random((1000, 8))
y = np.random.random((1000, 1))
model.evaluate(x, y)
我添加了一个列表,现在在测试步骤中,它将用输出附加这个列表。您需要在model.compile()
中添加run_eagerly=True
才能正常工作。这将输出一个这样的输出列表:
<tf.Tensor: shape=(32, 1), dtype=float32, numpy=
array([[ 0.10866462],
[ 0.2749035 ],
[ 0.08196291],
[ 0.25862294],
[ 0.30985728],
[ 0.20230596],
...
[ 0.17108777],
[ 0.29692617],
[-0.03684975],
[ 0.03525433],
[ 0.26774448],
[ 0.21728781],
[ 0.0840873 ]], dtype=float32)>