<jupyter_start><jupyter_text>Explicação para a multiplicação de matrizeslink: https://www.somatematica.com.br/emedio/matrizes/matrizes4.php<jupyter_code>import tensorflow as tf

tf.__version__<jupyter_output>/home/lucas/anaconda3/envs/env_gpu_tf-1.14/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_qint8 = np.dtype([("qint8", np.int8, 1)])
/home/lucas/anaconda3/envs/env_gpu_tf-1.14/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_quint8 = np.dtype([("quint8", np.uint8, 1)])
/home/lucas/anaconda3/envs/env_gpu_tf-1.14/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
  _np_qint16 = np.dtype([("qint16", np.int16, 1)])
/home/lucas/anaconda3/[...]<jupyter_text>Multiplicação de Matrizes com TensorFlowA multiplicação de matrizes deve obedecer a seguinte regra:* A quantidade de colunas da primeira matriz da multiplicação deve ser igual a quantidade de linhas da segunda matriz da multiplicação.Lembrando que a ordem das matrizes na multiplicação afeta o resultado.**A matriz resultante terá as dimensões com a qtd de linhas da primeira matriz da multiplicação e a qtd de colunas da segunda matriz da multiplicação**.Caso utilize o operador * ao invés do método matmult() do TensorFlow, não será o mesmo resultado em ambas operações, portanto, **tome cuidado**.<jupyter_code># Definição de matrizes no TF utilizando constantes
a = tf.constant([[1, 2], [3, 4]])
b = tf.constant([[-1, 3], [4, 2]])
# Definição da fórmula para multiplicação de matrizes com TensorFlow
multiplicacao = tf.matmul(a, b)
with tf.Session() as sess:
    print(sess.run(a))
    print('\n')
    print(sess.run(b))
    print('\n')
    print(sess.run(multiplicacao))
# É possível fazer a multiplicação da forma inversa definida acima
# porque são matrizes quadradas, ou seja, a qtd de linhas é igual de colunas em ambas
# Portanto, invertendo a ordem da multiplicação não daria problema
# Entretanto, a ordem das matrizes na multiplicação afeta o resultado
multiplicacao2 = tf.matmul(b, a)
with tf.Session() as sess:
    print(sess.run(b))
    print('\n')
    print(sess.run(a))
    print('\n')
    print(sess.run(multiplicacao2))
a1 = tf.constant([[2, 3], [0, 1], [-1, 4]])
b1 = tf.constant([[1, 2, 3], [-2, 0, 4]])

# A multiplicação não ocorre erros porque a quantidade de colunas da primeira matriz (a1)
# é igual a quantidade de linhas da segunda matriz (b1)
multiplicacao3 = tf.matmul(a1, b1)
print('Dimensões matriz a1:', a1.shape)
print('Dimensões matriz b2:', b1.shape)
with tf.Session() as sess:
    print(sess.run(a1))
    print('\n')
    print(sess.run(b1))
    print('\n')
    print(sess.run(multiplicacao3))<jupyter_output>[[ 2  3]
 [ 0  1]
 [-1  4]]


[[ 1  2  3]
 [-2  0  4]]


[[-4  4 18]
 [-2  0  4]
 [-9 -2 13]]
{'fraction_non_alphanumeric': 0.13319044703000613, 'fraction_numerical': 0.035211267605633804, 'mean_word_length': 4.445, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '640825', 'license': 'MIT', 'n_tokens_mistral': 1298, 'n_tokens_neox': 1235, 'n_words': 370, 'path': 'basico/multiplicacao_matrizes-LUCAS.ipynb', 'repo_name': 'ldynczuki/tensorflow_curso', 'size': '3266'}