2016-08-17 7 views
0

Kann ich nur bestimmte Einträge in einem Tensor Werte zuweisen? Ich habe diese Probleme, wenn ich die Kreuzkorrelationsmatrix einer NxP-Merkmalsmatrix feats berechne, wobei N Beobachtungen und P die Dimension ist. Einige Spalten sind konstant, so dass die Standardabweichung Null ist, und ich möchte nicht durch std für diese konstante Spalte teilen. Hier ist, was ich getan habe:zuweisen bestimmte Einträge von Tensor, wie set_subtensor von Theano

fmean, fvar = tf.nn.moments(feats, axes = [0], keep_dims = False) fstd = tf.sqrt(fvar) feats = feats - fmean sel = (fstd != 0) feats[:, sel] = feats[:, sel]/ fstd[sel] corr = tf.matmul(tf.transpose(feats), feats)

Aber ich habe diesen Fehler: TypeError: 'Tensor' object does not support item assignment. Gibt es eine Problemumgehung für ein solches Problem?

Antwort

0

Sie können Ihre feats eine tf.Variable und tf.scatter_update verwenden, um Standorte selektiv zu aktualisieren.

Es ist ein wenig peinlich, dass scatter_update eine Liste der zu aktualisierenden linearen Indizes benötigt, also müssten Sie Ihre implizite 2D-Spezifikation [:, sel] in eine explizite Liste von 1D-Indizes konvertieren. Es gibt beispielsweise von here 1D Indizes von 2D-Konstruktion

Es gibt einige Arbeit zu vereinfachen, diese Art von Anwendungsfall in Frage #206

+0

ich sehe. Werde es versuchen. Vielen Dank! –

Verwandte Themen