Skip to content

Instantly share code, notes, and snippets.

@ahwillia
Created October 27, 2016 07:25
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save ahwillia/4c10830640d325e0cab978bc18c6263a to your computer and use it in GitHub Desktop.
Save ahwillia/4c10830640d325e0cab978bc18c6263a to your computer and use it in GitHub Desktop.
PCA in TensorFlow
import numpy as np
import tensorflow as tf
# N, size of matrix. R, rank of data
N = 100
R = 5
# generate data
W_true = np.random.randn(N,R)
C_true = np.random.randn(R,N)
Y_true = np.dot(W_true, C_true)
Y_tf = tf.constant(Y_true.astype(np.float32))
W = tf.Variable(np.random.randn(N,R).astype(np.float32))
C = tf.Variable(np.random.randn(R,N).astype(np.float32))
Y_est = tf.matmul(W,C)
loss = tf.reduce_sum((Y_tf-Y_est)**2)
# regularization
alpha = tf.constant(1e-4)
regW = alpha*tf.reduce_sum(W**2)
regC = alpha*tf.reduce_sum(C**2)
# full objective
objective = loss + regW + regC
# optimization setup
train_step = tf.train.AdamOptimizer(0.001).minimize(objective)
# fit the model
init_op = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init_op)
for n in range(10000):
sess.run(train_step)
if (n+1) % 1000 == 0:
print('iter %i, %f' % (n+1, sess.run(objective)))
@lhb5883
Copy link

lhb5883 commented Sep 27, 2017

What does this op stand for ?
regW = alphatf.reduce_sum(W**2)
regC = alpha
tf.reduce_sum(C**2)
It seems to make regularization of W or C?
I think It is not need to square the W or T, I guess.

@N-McA
Copy link

N-McA commented May 8, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment