Как написать простой l oop (для элемента матрицы) в Tensorflow? - PullRequest
0 голосов
/ 01 мая 2020

Этот код находится в Matlab2018b + Tensorflow 1.2 (tf) + Numpy (np)

%A is a matrix of size [4,10], initialize from the same A_ in Matlab as
A = tf.Variable(np.float32(A_)); 
%Input is a input array of size [1, 10] as
Input = tf.placeholder(tf.float32,[10]);  %during a loop I pass value to it from Matlab

Затем я хочу сделать следующее (пример кода Matlab):

tmp = 0;
for j = 1 : 4
    tmp = tmp + sum((A(j,:)-Input).^2);
end
%The code means: for each row of A, for each element, (A - Input)^2, sum it

Как написать это в Tensorflow? Надеемся, что код может работать в Tensorflow 1.2, не обязательно 1.2

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете легко перевести код с помощью numpy:

import numpy as np

A = np.zeros(shape=(4,10))
Input = np.ones(shape=(1,10))
for j in range(A.shape[0]):
    tmp = tmp + np.sum( (A[j,:]-Input)**2 )

Вывод

>>tmp 
>> 40

Это немного другие tensorflow переменные, потому что вы работаете с объектами а не цифры. Вам необходимо настроить команду sum: redu_sum

import tensorflow as tf
import numpy as np

A = tf.Variable(np.float32( np.zeros(shape=[4,10]) ));
Input = tf.placeholder(tf.float32,[10]);

tmp = 0
for j in range(A.shape[0]):
    tmp = tmp + tf.math.reduce_sum( (A[j,:]-Input)**2 )

Здесь выводом является объект (взгляните на форму!)

>> tmp
>> <tf.Tensor 'add_7:0' shape=() dtype=float32>

Вы также можете суммировать все напрямую

tf.math.reduce_sum((A-Input)**2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...