python-3.x - 如何使用 keras/tensorflow 构建无监督的 CNN 模型?

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

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

我在用 keras 构建神经网络时遇到了麻烦,因为
model.fit() 函数需要训练数据和标记数据(地面实况数据)。

所以我的问题是,有没有办法用 keras 或 tensorflow 构建一个无监督的 CNN?如果是这样,我应该怎么做才能建立一个?是否有应用示例或我可以引用的内容?

提前致谢!

最佳答案

您可以使用自动编码器使用 keras 构建无监督的 CNN。它的代码,用于时尚 MNIST 数据,如下所示:

# 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想要查询更多的信息。

关于python-3.x - 如何使用 keras/tensorflow 构建无监督的 CNN 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55681649/

相关文章:

Python3 - 计算两个列表之间每对的出现次数

python - 如何通过python连接 "Tally ODBC"?

Python3.4 : Opening file with mode 'w' still gives me FileNotFound error

python - Keras - 训练卷积网络,获得自动编码器输出

python-3.x - 如何存储词向量嵌入?

python - PyQt5中QTextBrowser中的回车

python - tf.contrib.learn.LinearRegressor 的拟合函数要求切换到 tf.train.get_global_step

machine-learning - TensorFlow:了解评估返回的参数

javascript - Tensorflow.js LSTM 时间序列预测

python - 使用 theano 函数在 keras 中自定义损失函数