def multi_head_attention(query, key, value, num_units, heads, masked=False):
  query = tf.keras.layers.Dense(num_units, activation=tf.nn.relu)(query)
  key = tf.keras.layers.Dense(num_units, activation=tf.nn.relu)(key)
  value = tf.keras.layers.Dense(num_units, activation=tf.nn.relu)(value)

  query = tf.concat(tf.split(query, heads, axis = -1), axis=0)
  key = tf.concat(tf.split(key, heads, axis=-1), axis=0)
  value = tf.concat(tf.split(value, heads, axis=-1), axis=0)

여기서 layer.dense 부분이 이해가 잘 안갑니다.
예를들어 query = 하는 코드를 보면 query 가 들어가는 거고 num_units개수만큼 나오는 건가요? 그다음에 활성화 함수로 relu를 쓰고?