我正在尝试实现如下所示的简单自动编码器。
输入特征的数量为2,我想构建稀疏自动编码器以降维到特征1。我选择的节点数是2(输入),8(隐藏),1(减少特征),8(隐藏), 2(输出)比仅使用 (2, 1, 2) 节点增加一些复杂性。样本数 N 约为 10000。“DATA”只是一个包含整数值的 2x10000 矩阵。
import tensorflow as tf
x = tf.placeholder(shape=[None, 2])
w1 = tf.Variable(tf.random_normal(shape=[2, 8]))
w2 = tf.Variable(tf.random_normal(shape=[8, 1]))
h1 = tf.nn.relu(tf.matmul(x, w1))
encoded = tf.matmul(h1, w2)
h2 = tf.nn.relu(encoded)
h3 = tf.nn.relu(tf.matmul(h2, tf.transpose(w2)))
y = tf.matmul(h3, tf.transpose(w1))
mse = tf.reduce_mean(tf.squared_difference(x, y))
optimizer =
tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(mse)
sess = tf.Session()
sess.run(init)
fd = {x: DATA}
loss_value, reduced_feature = sess.run([mse, encoded], feed_dict=fd)
我对实施有 2 个问题,因为结果与我预期的完全不同。
这个实现正确吗?变量“reduced_feature”会显示来自 2 个特征输入的缩减特征(1d 特征)吗?
如果我想使用比输入更多的隐藏节点,我应该添加一些稀疏条件吗?如果是的话,你能展示一些这个任务的示例代码吗?