据我所知,您无法真正访问数据本身(即像指针一样)。原因是代码将与数据无关,因此它可以将数据传递到不同的 CPU 或 GPU,而无需您担心该部分(或者您可以指定要使用的设备,但这会很麻烦)。
所以 tf.slice 将是正确使用的函数。
你可以这样做:
for i in range(n_sample):
curr_slice = tf.slice(C, [i,0], [n_sample,1])
do_something(curr_slice)
这不是最有效的版本,但它是您在 cmets 中要求的。
for i inVectorized range(n_sample):approach
curr_sliceloss = tf.slice(C, [i,0], [n_sample,1])
y.assign_add( tf.nn.l2_loss(tf.sub(curr_slice,X - tf.matmul(X,curr_slice)C)) + lambdalamb * tf.nn.l2_loss(curr_slice) C)
loss=tf.reduce_sum(y)
矢量化方法更简洁:
loss = tf.nn.l2_loss(X - tf.matmul(X,C)) + lamb * tf.nn.l2_loss(C)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
sess.run(train_step)
您可能需要通过创建占位符来初始化某些值。
或者我在 skflow 中找不到它,但在 scikit 中学习它是一个简单的 3 班轮。
from sklearn.linear_model import Ridge
clf = Ridge(alpha=1.0)
clf.fit(X, W)