Возникли проблемы с вычислением SINR с использованием TensorFlow. Насколько численно стабилен TF, когда дело касается коPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Возникли проблемы с вычислением SINR с использованием TensorFlow. Насколько численно стабилен TF, когда дело касается ко

Сообщение Anonymous »

Итак, у меня есть код для обучения нейронной сети, и потеря имеет отрицательное значение SINR для системы с несколькими группами (G) и несколькими пользователями (K). Однако, когда я вычисляю sinr, происходит что-то странное.
Итак, формула SINR такова:
Изображение

А это мой код:

Код: Выделить всё

def find_sinr_over_group(H, W):

sigma2 = 1
# Compute the Hermitian transpose (conjugate transpose) of W
W_H = tf.transpose(tf.math.conj(W), perm=[0, 2, 1])  # Shape: (batch_size, G, M)

# Compute Signal Power for each user in each group
signal_power = []
for g in range(W.shape[-1]):  # Loop over each group g
w_h_g = W_H[:, g, :]  # Shape: (batch_size, M)
h_g = H[:, :, :, g]  # Shape: (batch_size, M, K)

# Matrix multiplication to compute signal power
s = tf.matmul(w_h_g[:, tf.newaxis, :], h_g)  # Shape: (batch_size, 1, K)
s = tf.squeeze(s, axis=1)  # Shape: (batch_size, K)
signal_power.append(s)

signal_power = tf.stack(signal_power, axis=-1)  # Shape: (batch_size, K, G)
signal_power = tf.math.real(tf.math.multiply(signal_power, tf.math.conj(signal_power)))
# signal_power = tf.math.abs(signal_power) ** 2  # Take the absolute square

# Compute Total Power for each user in each group
total_power = []
for g in range(W.shape[-1]):  # Loop over each group g
w_h = W_H[:, :, :]  # Shape: (batch_size, G, M)
h_g = H[:, :, :, g]  # Shape: (batch_size, M, K)

# Matrix multiplication to compute total power
t = tf.matmul(w_h, h_g)  # Shape: (batch_size, G, K)
t = tf.math.real(tf.math.multiply(t, tf.math.conj(t)))
# t = tf.math.abs(t) ** 2  # Shape: (batch_size, G, K)
total_power.append(tf.reduce_sum(t, axis=1))  # Sum across G to get (batch_size, K)

total_power = tf.stack(total_power, axis=-1)  # Shape: (batch_size, K, G)

# Isolate the Interference Power by subtracting Signal Power from Total Power
interference_power = total_power - signal_power  # Shape: (batch_size, K, G)

# Add noise power
interference_plus_noise_power = interference_power + sigma2  # Add noise

# Compute SINR
sinr = signal_power / interference_plus_noise_power  # Shape: (batch_size, K, G)

return sinr
Но проблема в том, что мощность помех в некоторых случаях отрицательна. Что численно невозможно, поскольку мощность сигнала — это всего лишь частный случай полной мощности. Кто-нибудь знает, почему это происходит и как это исправить?
Как видите, сначала я использовал функцию tf.abd, а затем повысил в степени 2. Я подумал, что это может быть Может быть проблема с прессом, поэтому я попробовал набрать текст с помощью конъюгата, чтобы получить мощность сигнала. Но у меня все еще есть эта проблема.

Подробнее здесь: https://stackoverflow.com/questions/790 ... able-is-tf
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»