Tensorflow: tf.layers.dense рдЪрдкрдЯреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдорд╛рд░реНрдЪ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: tensorflow/tensorflow

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ:

рдиреЛрдЯ: рдпрджрд┐ inputs рдЯреЗрдВрд╕рд░ рдХреА рд░реИрдВрдХ 2 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рд╣реИ
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдЪрдкрдЯрд╛ рд╣реБрдЖ w рдЧреБрдгрд╛ рдХрд░реЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд┐рдЯрд░реНрди рдЯреЗрдВрд╕рд░ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде shape=(2, 2, 2, 400) , рдЬреИрд╕реЗ рдХрд┐ рдЗрдирдкреБрдЯ рдЪрдкрдЯрд╛ рдирд╣реАрдВ рд╣реБрдЖ
tf.layers.dense(tf.placeholder(tf.float32, (2,2,2,2)), 400)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрд╣ рдзрдиреНрдпрд╡рд╛рдж, рдЯреЗрдВрд╕реЛрд░реНрдбреЛрдЯ рдХрдиреЗрдХреНрд╢рди рдЗрд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ tf.dense рд╡реЗрдЯ рдЯреЗрдВрд╕рд░ рдХреЗ рдкрд╣рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдЯреЗрдВрд╕рд░ рдХреЗ рдЕрдВрддрд┐рдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдЕрдиреБрдмрдВрдзрд┐рдд рдХрд░рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред "рд╕рдорддрд▓" рд╢рдмреНрдж рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ

рдЦрд┐рд▓реМрдирд╛ рдЙрджрд╛рд╣рд░рдг рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП tf.dense рдХреЛ рд╕рдордХрдХреНрд╖ np.tensordot . рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ

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)

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдУрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЦреБрдж рдХреЛ рд╣рдЯрд╛рдирд╛ рдирд╣реАрдВ рдерд╛ред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЬреЛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдЯреЗрдВрд╕реЙрд░реНрдбреЛрдЯ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЛрдиреЛрдВ рд╕рд╣реА рд╣реИрдВ - рдФрд░ рдЬрд┐рд╕ рдЗрдВрдЬреАрдирд┐рдпрд░ рд╕реЗ рдореИрдВрдиреЗ рдмрд╛рдд рдХреА, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛ рдХрд┐ рд╣рдо рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛрдЧрд╛ ' рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред (рдЯреЗрдиреНрд╕реЙрд░реНрдбреЛрдЯ рджреЗрдЦреЗрдВ: https://docs.scipy.org/doc/numpy/reference/generated/numpy.tensordot.html)

рдпрджрд┐ рдЖрдк рдХреБрдЫ рд░рд┐рд╡рд░реНрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрдЧ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдЖрд╣ рдзрдиреНрдпрд╡рд╛рдж, рдЯреЗрдВрд╕реЛрд░реНрдбреЛрдЯ рдХрдиреЗрдХреНрд╢рди рдЗрд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ tf.dense рд╡реЗрдЯ рдЯреЗрдВрд╕рд░ рдХреЗ рдкрд╣рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдЯреЗрдВрд╕рд░ рдХреЗ рдЕрдВрддрд┐рдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдЕрдиреБрдмрдВрдзрд┐рдд рдХрд░рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред "рд╕рдорддрд▓" рд╢рдмреНрдж рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ

рдЦрд┐рд▓реМрдирд╛ рдЙрджрд╛рд╣рд░рдг рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП tf.dense рдХреЛ рд╕рдордХрдХреНрд╖ np.tensordot . рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ

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)
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

davidbernat picture davidbernat  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jacobma-create picture jacobma-create  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aerointern16 picture aerointern16  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ppwwyyxx picture ppwwyyxx  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ilblackdragon picture ilblackdragon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ