![](/img/trans.png)
[英]Theano function raises ValueError with 'givens' attribute
[英]Slicing a matrix in the givens argument of a theano function
我有以下代碼,嘗試將PCA應用於MNIST數據集。
X_train, y_train = mnist.data[:60000] / 255., mnist.target[:60000]
X_train, y_train = shuffle(X_train, y_train)
X_train, y_train = X_train[:5000], y_train[:5000]
pca = PCA(M=2)
X = T.matrix('X', dtype='float64')
i = T.scalar()
j = T.scalar()
# Theano function which fits the model to the
# data i.e. applies dimensionality reduction
transform = theano.function(
inputs=[i, j],
outputs=pca.transform(X),
givens={
X: X_train[(y_train == i) + (y_train == j)]
}
)
X_transformed = transform(i, j)
y_ = y_train[(y_train == i) + (y_train == j)]
如可以在上面的代碼中可以看出,我試圖取代X
與訓練數據集在片givens
PARAMS。 但是,上面的代碼導致以下錯誤:
TypeError: Cannot convert Type TensorType(float64, vector) (of Variable <TensorType(float64, vector)>) into Type TensorType(float64, matrix). You can try to manually convert <TensorType(float64, vector)> into a TensorType(float64, matrix).
這意味着我正在嘗試將向量分配給矩陣,這不是我期望的行為(我使用numpy進行了兩次檢查)。 我還嘗試了另一種方法,即我直接使用布爾數組對訓練數據集X_train進行索引,而不是使用索引來執行我自己的切片,但這也沒有用。
X_train, y_train = mnist.data[:60000] / 255., mnist.target[:60000]
X_train, y_train = shuffle(X_train, y_train)
X_train, y_train = X_train[:5000], y_train[:5000]
pca = PCA(M=2)
X = T.matrix('X', dtype='float64')
bool_arr = T.vector()
# Theano function which fits the model to the
# data i.e. applies dimensionality reduction
transform = theano.function(
inputs=[i, j],
outputs=pca.transform(X),
givens={
X: X_train[bool_arr]
}
)
X_transformed = transform((y_train == i) + (y_train == j))
y_ = y_train[(y_train == i) + (y_train == j)]
出現以下錯誤:
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
即沒有工作的唯一方法是使用不顧givens
PARAM,並且僅使用輸入和輸出,因此:
X = T.matrix('X', dtype='float64')
# Theano function which fits the model to the
# data i.e. applies dimensionality reduction
transform = theano.function(
inputs=[X],
outputs=pca.transform(X),
)
X_ = X_train[(y_train == i) + (y_train == j)]
y_ = y_train[(y_train == i) + (y_train == j)]
X_transformed = transform(X_)
盡管如此,我對為什么我的前兩種方法不起作用感到好奇,並希望知道是否有人可以指出我可能會出錯的地方,因為我只是從Theano開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.