閉じたフォーム解を使ってTensorFlowで最小二乗係数を計算したいとします。通常、私はそうのようにこれを行う、X
とy
は共変量とターゲット変数に対応するTensorFlowプレースホルダです TensorFlowで計算値を定数としてキャッシュする
beta_hat = tf.matmul(
tf.matmul(tf.matrix_inverse(tf.matmul(tf.transpose(X), X)), tf.transpose(X)), y
)
、それぞれでしょう。私はもちろん、私は提供しなかったエラーになるだろう
sess.run(y_pred, feed_dict={X: data_X})
私が実行した場合、私はその後、予測を実行したい場合は、私のような何かをするだろう
、
y_pred = tf.matmul(X, beta_hat)
、プレースホルダーに必要な値はy
です。私はそれを計算した後に定数としてbeta_hat
を扱う柔軟性を持っていたいと思います(予測のための新しい共変量行列の新しいプレースホルダーを定義する必要はありません)。これを実現するための一つの方法は、私がセッションを実行し、定数を取得する必要もなく、着信用に別のプレースホルダを作成し、どちらもするように定数としてテンソルを治療するために、よりエレガントな方法があった場合、私は思っていた
# Make it constant.
beta_hat = sess.run(beta_hat, feed_dict={X: data_X, y: data_y})
y_pred = tf.matmul(X, beta_hat)
です予測に使用するデータ。
私が説明している状況を示すサンプルコードです。
import numpy as np
import tensorflow as tf
n, k = 100, 5
X = tf.placeholder(dtype=tf.float32, shape=[None, k])
y = tf.placeholder(dtype=tf.float32, shape=[None, 1])
beta = np.random.normal(size=(k,))
data_X = np.random.normal(size=(n, k))
data_y = data_X.dot(beta)
data_y += np.random.normal(size=data_y.shape)/3.0
data_y = np.atleast_2d(data_y).T
# Convert to 32-bit precision.
data_X, data_y = np.float32(data_X), np.float32(data_y)
# Compute the least squares solution.
beta_hat = tf.matmul(
tf.matmul(tf.matrix_inverse(tf.matmul(tf.transpose(X), X)),
tf.transpose(X)), y
)
# Launch the graph
sess = tf.Session()
sess.run(tf.initialize_all_variables())
print "True beta: {}".format(beta)
print "Est. beta: {}".format(
sess.run(beta_hat, feed_dict={X: data_X, y: data_y}).ravel()
)
# # This would error.
# y_pred = tf.matmul(X, beta_hat)
# print "Predictions:"
# print sess.run(y_pred, feed_dict={X: data_X})
# Make it constant.
beta_hat = sess.run(beta_hat, feed_dict={X: data_X, y: data_y})
# This will no longer error.
y_pred = tf.matmul(X, beta_hat)
print "Predictions:"
print sess.run(y_pred, feed_dict={X: data_X})
ravel == eval? (または、この関数は文書化されていますか?) –