auto-encoder

| `import os
import tensorflow as tf
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt

tf.random.set_seed(22)
np.random.seed(22)
os.environ[‘TF_CPP_MIN_LOG_LEVEL’] = ‘2’
assert tf.version.startswith(‘2.’)

把多张image保存到一张image中去

def save_images(imgs,name):
new_im = Image.new(‘L’,(280,280))

index = 0
for i in range(0,280,28):
    for j in range(0,280,28):
        im = imgs[index]
        im = Image.fromarray(im,mode='L')
        new_im.paste(im,(i,j))
        index +=1
new_im.save()

h_dim =20
batchsz = 512
lr = 1e-3

(x_train,y_train),(x_test,y_test) = tf.keras.datasets.mnist.load_data()
x_train,x_test = x_train.astype(np.float32)/255,x_test.astype(np.float32)/255

train_db = tf.data.Dataset.from_tensor_slices(x_train)
train_db = train_db.shuffle(batchsz*5).batch(batchsz)

test_db = tf.data.Dataset.from_tensor_slices(x_test)
test_db = test_db.batch(batchsz)

print(x_train.shape,x_test.shape)

class AE(tf.keras.Model):
def init(self):
super(AE,self).init()

    # Encoder
    self.encoder = tf.keras.Sequential([
        tf.keras.layers.Dense(256,activation='relu'),
        tf.keras.layers.Dense(128,activation='relu'),
        tf.keras.layers.Dense(h_dim)
    ])

    # Decoder
    self.decoder = tf.keras.Sequential([
        tf.keras.layers.Dense(128,activation='relu'),
        tf.keras.layers.Dense(256,activation= tf.nn.relu),
        tf.keras.layers.Dense(784)
    ])

# 前向传播
def call(self,inputs,training=None):

    h = self.encoder(inputs)
    x_hat = self.decoder(h)

    return x_hat

model = AE()
model.build(input_shape=(None,784))
model.summary()
optimizer = tf.keras.optimizers.Adam(lr=lr)
for epoch in range(100):
for step,x in enumerate(train_db):
x= tf.reshape(x,[-1,784])
with tf.GradientTape() as tape:
x_rec_logits =model(x)
# 把每一个像素当做一个二分类问题来处理
rec_loss = tf.losses.binary_crossentropy(x,x_rec_logits,from_logits=True)
rec_loss = tf.reduce_mean(rec_loss)

    grads = tape.gradient(rec_loss,model.trainable_variables)
    optimizer.apply_gradients(zip(grads,model.trainable_variables))
    if step % 100 ==0:
        print(rec_loss,step)
`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: Auto-encoder是一种深度学习模型,用于将输入数据编码为低维表示,并尽可能地重构原始数据作为输出。在降维方面,PCA会将不同类别的数据混合在一起,而auto-encoder则可以将它们分开。除了降维之外,auto-encoder还有其他用途,比如图片搜索。 引用: 训练一个auto-encoder的过程通常会先固定一些权重参数,然后逐层训练多个自编码器,每个自编码器的输入和输出维度逐渐逼近目标维度。最后,可以使用反向传播来微调网络参数。现在也可以不进行预训练,直接训练auto-encoder。此外,auto-encoder还可以与卷积神经网络(CNN)一起使用。 引用: 特征区分技术是指在auto-encoder中,通过编码器获取的Embedding向量中,可以区分出不同输入数据的特征信息。比如,对于语音输入,可以分别提取出语音内容和说话者的特征。这就是Feature Disentangle的目标。 根据李宏毅老师的讲解,auto-encoder是一种用于降维、重构和特征提取的深度学习模型。它可以将输入数据编码为低维表示,并尽可能地重构原始数据作为输出。除了降维之外,auto-encoder还可以用于图片搜索等任务。训练auto-encoder时,可以使用预训练和微调的方法,也可以直接进行训练。此外,auto-encoder还可以与卷积神经网络(CNN)结合使用。特征区分技术可以用于auto-encoder中,用于提取不同输入数据的特征信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值