首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将有和没有膨胀率的卷积层的输出保存为图像?

如何将有和没有膨胀率的卷积层的输出保存为图像?
EN

Stack Overflow用户
提问于 2022-02-09 01:14:08
回答 1查看 206关注 0票数 1

我想保存一个图像文件,看看关于差异使用卷积层与膨胀率和没有这一点。

当然,我可以搜索有关这方面的图像,但我想看看我的数据集的差异。

有特殊的功能吗?或者我可以像keras层一样用keras来编写代码吗?

我使用python 3.8和tf 2.4.0

EN

回答 1

Stack Overflow用户

发布于 2022-02-09 08:40:14

您可以使用matplotlib和自定义Callback来保存每个时代之后的CNN层的功能映射。下面是一个有用的例子:

代码语言:javascript
复制
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:

原始图像

特征图

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71042871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档