我想保存一个图像文件,看看关于差异使用卷积层与膨胀率和没有这一点。
当然,我可以搜索有关这方面的图像,但我想看看我的数据集的差异。
有特殊的功能吗?或者我可以像keras层一样用keras来编写代码吗?
我使用python 3.8和tf 2.4.0
发布于 2022-02-09 08:40:14
您可以使用matplotlib和自定义Callback来保存每个时代之后的CNN层的功能映射。下面是一个有用的例子:
import tensorflow as tf
import pathlib
import matplotlib.pyplot as plt
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
batch_size = 32
normalized_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(180, 180),
batch_size=batch_size)
model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255, input_shape=(180, 180, 3)),
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', dilation_rate=(3, 3)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(5)
])
class CustomCallback(tf.keras.callbacks.Callback):
def __init__(self, data, sample_size):
self.data = data
self.sample_size = sample_size
def on_epoch_end(self, epoch, logs=None):
images, _ = next(iter(self.data.take(self.sample_size)))
image = tf.expand_dims(images[0], axis=0)
output = first_cnn_layer(image)
plt.imsave('image{}.png'.format(epoch), images[0].numpy()/255)
ix = 1
for _ in range(4):
for _ in range(4):
ax = plt.subplot(4, 4, ix)
ax.set_xticks([])
ax.set_yticks([])
plt.imshow(output[0, :, :, ix-1], cmap='gray')
ix += 1
plt.savefig('filters{}.png'.format(epoch))
first_cnn_layer = model.layers[1]
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
history = model.fit(normalized_ds, epochs=2, callbacks=[CustomCallback(normalized_ds, 1)])与dilation_rate=(1, 1)在划时代1:
原始图像

特征图

与dilation_rate=(3, 3)在划时代1:
原始图像

特征图

https://stackoverflow.com/questions/71042871
复制相似问题