自编码器特征提取python代码
时间: 2023-07-09 12:43:05 浏览: 54
好的,以下是一个简单的自编码器特征提取的 Python 代码示例:
```python
import numpy as np
import tensorflow as tf
# 定义自编码器模型
class Autoencoder:
def __init__(self, input_dim, hidden_dim):
self.input_dim = input_dim
self.hidden_dim = hidden_dim
self.inputs = tf.placeholder(tf.float32, [None, input_dim])
self.weights = {
'encoder': tf.Variable(tf.random_normal([input_dim, hidden_dim])),
'decoder': tf.Variable(tf.random_normal([hidden_dim, input_dim]))
}
self.biases = {
'encoder': tf.Variable(tf.random_normal([hidden_dim])),
'decoder': tf.Variable(tf.random_normal([input_dim]))
}
self.encoded = tf.nn.sigmoid(tf.add(tf.matmul(self.inputs, self.weights['encoder']), self.biases['encoder']))
self.decoded = tf.nn.sigmoid(tf.add(tf.matmul(self.encoded, self.weights['decoder']), self.biases['decoder']))
self.loss = tf.reduce_mean(tf.pow(self.inputs - self.decoded, 2))
self.optimizer = tf.train.AdamOptimizer().minimize(self.loss)
self.sess = tf.Session()
self.sess.run(tf.global_variables_initializer())
# 训练自编码器模型
def train(self, input_data, epochs=1000, batch_size=32):
num_batches = input_data.shape[0] // batch_size
for epoch in range(epochs):
epoch_loss = 0.0
for i in range(num_batches):
batch_data = input_data[i*batch_size:(i+1)*batch_size]
_, loss = self.sess.run([self.optimizer, self.loss], feed_dict={self.inputs: batch_data})
epoch_loss += loss
if epoch % 100 == 0:
print('Epoch', epoch, 'loss:', epoch_loss/num_batches)
# 提取特征
def extract_features(self, input_data):
return self.sess.run(self.encoded, feed_dict={self.inputs: input_data})
# 测试代码
if __name__ == '__main__':
# 构造一个 3 维输入数据
input_data = np.random.rand(100, 3)
# 定义一个自编码器模型,输入维度为 3,隐藏层维度为 2
autoencoder = Autoencoder(3, 2)
# 训练模型
autoencoder.train(input_data)
# 提取特征
features = autoencoder.extract_features(input_data)
print(features)
```
这个示例代码实现了一个简单的自编码器模型,并使用该模型对三维输入数据进行特征提取。你可以根据自己的需要修改输入数据的维度和隐藏层维度,以及训练次数和批次大小等超参数。