Dokumentasi menyatakan:
Catatan: jika tensor
inputs
memiliki rank lebih besar dari 2, maka ia adalah
diratakan sebelum matriks awal dikalikan denganw
.
Namun, tensor kembali berikut dengan bentuk shape=(2, 2, 2, 400)
, seolah-olah masukan belum diratakan
tf.layers.dense(tf.placeholder(tf.float32, (2,2,2,2)), 400)
Ups, maaf, tidak bermaksud menghapus diri saya sendiri. Menyelidiki secara internal, mencoba menambahkan orang yang menurut saya bertanggung jawab.
Jadi, setelah penyelidikan, apa yang saya diberitahu adalah bahwa itu berperilaku seperti tensordot, sehingga perilaku dan dokumentasi saat ini keduanya benar - dan insinyur yang saya ajak bicara mengatakan bahwa mereka mengira kami dapat menggunakan bahasa yang lebih tepat tetapi tidak. t selalu membantu karena bahasa saat ini jelas dan tidak ambigu dalam konteksnya. (Lihat tensordot: https://docs.scipy.org/doc/numpy/reference/generated/numpy.tensordot.html)
Jika Anda ingin mencoba membuat permintaan pull sendiri untuk melakukan beberapa rewording, itu akan diterima, tetapi saya menutup bug ini untuk saat ini karena kami tidak akan melakukan apa-apa secara internal.
Ah terima kasih, koneksi tensordot membuatnya lebih jelas.
Tampaknya tf.dense
berperilaku dengan mengkontraksikan indeks tensor input terakhir dengan indeks tensor bobot pertama. Kata "ratakan" itu membingungkan, tidak yakin apa artinya di sini
Contoh mainan saya buat sendiri untuk menerjemahkan tf.dense ke np.tensordot yang setara
tf.reset_default_graph()
x0 = np.ones((3, 3, 3))
w0 = np.arange(6).reshape((3, 2))
x = tf.constant(x0)
y = tf.layers.dense(x, 2)
var_dict = {v.op.name: v for v in tf.global_variables()}
assert(var_dict["dense/kernel"].get_shape() == (3, 2))
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(tf.assign(var_dict["dense/kernel"], w0))
sess.run(tf.assign(var_dict["dense/bias"], np.zeros((2,))))
expected_y0 = np.tensordot(x0,w0,axes=[(2,),(0,)])
y0 = sess.run(y)
np.testing.assert_allclose(y0, expected_y0)
Komentar yang paling membantu
Ah terima kasih, koneksi tensordot membuatnya lebih jelas.
Tampaknya
tf.dense
berperilaku dengan mengkontraksikan indeks tensor input terakhir dengan indeks tensor bobot pertama. Kata "ratakan" itu membingungkan, tidak yakin apa artinya di siniContoh mainan saya buat sendiri untuk menerjemahkan tf.dense ke np.tensordot yang setara