Tensorflow: Dokumentasi yang tidak jelas untuk perilaku perataan tf.layers.dense

Dibuat pada 7 Mar 2017  ·  3Komentar  ·  Sumber: tensorflow/tensorflow

Dokumentasi menyatakan:

Catatan: jika tensor inputs memiliki rank lebih besar dari 2, maka ia adalah
diratakan sebelum matriks awal dikalikan dengan w .

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)

docs-bug

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 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)

Semua 3 komentar

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)
Apakah halaman ini membantu?
0 / 5 - 0 peringkat