【问题标题】:How to build an unsupervised CNN model with keras/tensorflow?如何使用 keras/tensorflow 构建无监督的 CNN 模型?
【发布时间】:2019-09-04 23:46:58
【问题描述】:

我正在尝试为图像到图像的翻译应用程序构建 CNN,模型的输入是图像,输出是置信度图。训练期间没有标记置信度作为基本事实,但设计了一个损失函数来引导模型获得正确的输出。

我在使用 keras 构建神经网络时遇到了问题,因为 model.fit() 函数需要训练数据和标记数据(ground truth 数据)。

所以我的问题是,有没有办法用 keras 或 tensorflow 构建无监督的 CNN?如果是这样,我应该怎么做才能建造一个?有没有应用示例或者可以参考一下?

提前致谢!

【问题讨论】:

  • 您需要使用 TensorFlow 的低级 API。 Keras 旨在用于监督学习。低级 API 提供了更大的灵活性。看这里->tensorflow.org/guide/low_level_intro
  • 感谢您的回复。在这个网站中,低级 API 还需要定义预期输出 y_true,您能否更具体地说明如何使用低级 API 构建无监督神经网络?
  • @Jemma,您的问题现在解决了吗?否则,您可以尝试使用自动编码器来构建无监督 CNN。

标签: python-3.x tensorflow keras unsupervised-learning


【解决方案1】:

您可以使用自动编码器使用 keras 构建无监督 CNN。 Fashion MNIST Data 的代码如下所示:

# Python ≥3.5 is required
import sys
assert sys.version_info >= (3, 5)

# Scikit-Learn ≥0.20 is required
import sklearn
assert sklearn.__version__ >= "0.20"

# TensorFlow ≥2.0-preview is required
import tensorflow as tf
from tensorflow import keras
assert tf.__version__ >= "2.0"

# Common imports
import numpy as np
import os

(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.fashion_mnist.load_data()
X_train_full = X_train_full.astype(np.float32) / 255
X_test = X_test.astype(np.float32) / 255
X_train, X_valid = X_train_full[:-5000], X_train_full[-5000:]
y_train, y_valid = y_train_full[:-5000], y_train_full[-5000:]

def rounded_accuracy(y_true, y_pred):
    return keras.metrics.binary_accuracy(tf.round(y_true), tf.round(y_pred))

tf.random.set_seed(42)
np.random.seed(42)

conv_encoder = keras.models.Sequential([
    keras.layers.Reshape([28, 28, 1], input_shape=[28, 28]),
    keras.layers.Conv2D(16, kernel_size=3, padding="SAME", activation="selu"),
    keras.layers.MaxPool2D(pool_size=2),
    keras.layers.Conv2D(32, kernel_size=3, padding="SAME", activation="selu"),
    keras.layers.MaxPool2D(pool_size=2),
    keras.layers.Conv2D(64, kernel_size=3, padding="SAME", activation="selu"),
    keras.layers.MaxPool2D(pool_size=2)
])
conv_decoder = keras.models.Sequential([
    keras.layers.Conv2DTranspose(32, kernel_size=3, strides=2, padding="VALID", activation="selu",
                                 input_shape=[3, 3, 64]),
    keras.layers.Conv2DTranspose(16, kernel_size=3, strides=2, padding="SAME", activation="selu"),
    keras.layers.Conv2DTranspose(1, kernel_size=3, strides=2, padding="SAME", activation="sigmoid"),
    keras.layers.Reshape([28, 28])
])
conv_ae = keras.models.Sequential([conv_encoder, conv_decoder])

conv_ae.compile(loss="binary_crossentropy", optimizer=keras.optimizers.SGD(lr=1.0),
                metrics=[rounded_accuracy])
history = conv_ae.fit(X_train, X_train, epochs=5,
                      validation_data=[X_valid, X_valid])

conv_encoder.summary()
conv_decoder.summary()

您可以参考this link了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 2020-05-31
    • 2020-09-21
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多