Я пытаюсь реализовать нейронную сеть для декодирования зашумленного полученного сигнала. Каждый уровень моей нейронной сети выглядит следующим образом:
Один слой
Моя попытка:
for epoch in range(num_epochs):
epoch_loss = 0
for HY_, HH, X in train_dataset:
with tf.GradientTape() as tape:
loss, bers = detnet(HY_, HH, X, training=True)
gradients = tape.gradient(loss, detnet.trainable_variables)
optimizer.apply_gradients(zip(gradients, detnet.trainable_variables))
epoch_loss += loss.numpy()
temp.append(loss.numpy())
epoch_loss /= (num_train_samples // batch_size)
train_losses.append(epoch_loss)
# Evaluate on validation set
val_loss, _ = detnet(HY_val_, HH_val, X_val, training=True)
val_losses.append(val_loss.numpy())
print(f"Epoch {epoch + 1}, Training Loss: {epoch_loss}, Validation Loss: {val_losses[-1]}")
Есть ли какие-либо проблемы, описанные выше? Я не могу получить правильные BER в качестве бумаги, моя функция потерь насыщается до 1500, хотя я ожидаю, что она достигнет 500.
Я пытаюсь реализовать нейронную сеть для декодирования зашумленного полученного сигнала. Каждый уровень моей нейронной сети выглядит следующим образом: Один слой Моя попытка: [code]class DetNet(tf.keras.Model): def __init__(self, K, N, L, v_size, hl_size, res_alpha=0.9, log_loss=True): super(DetNet, self).__init__() self.K = K self.N = N self.L = L self.v_size = v_size self.hl_size = hl_size self.res_alpha = res_alpha self.log_loss = log_loss
self.layers_detnet = [] for i in range(L): layer = DetNetLayer(K, v_size, hl_size, res_alpha, name=f'layer_{i}') self.layers_detnet.append(layer)
def call(self, HY, HH, X, training=False): S = [tf.zeros_like(X)] V = [tf.zeros((tf.shape(HY)[0], self.v_size),dtype=tf.dtypes.as_dtype(HY.dtype))] losses = [] bers = []
for i, layer in enumerate(self.layers_detnet): Z = tf.concat([HY, S[-1], tf.linalg.matvec(HH, S[-1]), V[-1]], axis=-1) S_next, V_next = layer(Z, training=training) S.append(S_next) V.append(V_next)
loss = tf.reduce_mean(tf.reduce_mean(tf.square(X - S[-1]), axis=-1) / tf.reduce_mean(tf.square(X - tf.squeeze(tf.linalg.solve(HH, tf.expand_dims(HY, 2)), axis=2)), axis=-1)) if self.log_loss: loss *= tf.math.log(tf.cast(i + 1, tf.float32)) losses.append(loss)
ber = tf.reduce_mean(tf.cast(tf.not_equal(X, tf.sign(S[-1])), tf.float32)) bers.append(ber)
[/code] И мой цикл обучения (я использую tf.GradientTape): [code]for epoch in range(num_epochs): epoch_loss = 0 for HY_, HH, X in train_dataset: with tf.GradientTape() as tape: loss, bers = detnet(HY_, HH, X, training=True) gradients = tape.gradient(loss, detnet.trainable_variables) optimizer.apply_gradients(zip(gradients, detnet.trainable_variables)) epoch_loss += loss.numpy() temp.append(loss.numpy()) epoch_loss /= (num_train_samples // batch_size) train_losses.append(epoch_loss)
# Evaluate on validation set val_loss, _ = detnet(HY_val_, HH_val, X_val, training=True) val_losses.append(val_loss.numpy()) print(f"Epoch {epoch + 1}, Training Loss: {epoch_loss}, Validation Loss: {val_losses[-1]}")
[/code] Есть ли какие-либо проблемы, описанные выше? Я не могу получить правильные BER в качестве бумаги, моя функция потерь насыщается до 1500, хотя я ожидаю, что она достигнет 500.
У меня есть эта сеть (из статьи SimClR):
base_model = tf.keras.applications.ResNet50(include_top=False, weights=None, input_shape=(224, 224, 3))
base_model.trainable = True
#inputs = Input((224, 224, 3))
inputs = Input((224, 224, 3))
h =...
У меня есть эта сеть (из бумаги simclr):
base_model = tf.keras.applications.ResNet50(include_top=False, weights=None, input_shape=(224, 224, 3))
base_model.trainable = True
#inputs = Input((224, 224, 3))
inputs = Input((224, 224, 3))
h =...
У меня есть эта сеть (из бумаги simclr):
base_model = tf.keras.applications.ResNet50(include_top=False, weights=None, input_shape=(224, 224, 3))
base_model.trainable = True
#inputs = Input((224, 224, 3))
inputs = Input((224, 224, 3))
h =...
Я создаю карту, на которой должно быть семь базовых слоев. Легенд так много, что все они не могут поместиться на экране, поэтому необходимо добавить функцию карты, которая позволяет легендам появляться только при активации их базового слоя. На...
Я обучаю DeeplabV3+ семантической сегментации изображений дистанционного зондирования. Я создаю модель после урока по keras ( ), и она отлично работает, когда я использую для обучения фокусную потерю (предустановленную в Keras/tf). Маски имеют...