Tensorflow2.1: значения tf.Variable не обновляются при обучении - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь обучить модель смеси Гаусса через TF2.1, и моя модель выглядит примерно так:

import tensorflow as tf
import numpy as np

def my_network(input_dims=(250, 257), num_class=8631, mode='train'):
    inputs=Input(shape=input_dims)
    encoder_network=encoder_basemodel(input_dims)
    x_emb=encoder_network(inputs)

    mu=tf.Variable(initial_value=tf.random.normal([1, 512, num_class]), trainable=True)
    sig=tf.Variable(initial_value=tf.ones([1, 512, num_class], trainable=True)

    y=-tf.math.reduce_sum(-0.5*tf.math.log(2*3.14*sig)-0.5*tf.math.divide(tf.math.pow(tf.expand_dims(x_emb, -1)-mu, 2), sig), 1)

    model=tf.keras.models.Model(inputs=inputs, outputs=y)

    if mode=='train':
        opt=tf.keras.optimizers.Adam(lr=1e-3)
        model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['acc'])

    return model

encoder_network (некоторая сеть, состоящая из Dense и Conv1D Layers) параметры обычно оптимизируются при обучении, но mu и sig не обновляются вообще.

Я также пытался создать собственный слой следующим образом, но ничего не изменилось:

class gmm_layer(layers.Layer):
    def __init__(self, input_dim, num_class):
        super(gmm_layer, self).__init__()
        self.input_dim=input_dim
        self.num_class=num_class
        self.mu=tf.Variable(initial_value=tf.random.normal([1, 512, num_class]), trainable=True)
        self.sig=tf.Variable(initial_value=tf.ones([1, 512, num_class]), trainable=True)
    def call(self, inputs):
        return -tf.math.reduce_sum(-0.5*tf.math.log(2*np.pi*self.sig)-0.5*(tf.expand_dims(inputs, -1)-self.mu)**2/self.sig, 1)
    def mu(self):
        return self.mu
    def sig(self):
        return self.sig
    def get_config(self):
        return {'input_dim':self.input_dim, 'num_class':self.num_class}

Я не уверен, в чем проблема, поскольку у меня не было проблем с обучающими переменными, созданными с помощью tf.Variable в версии TF <2.0. </p>

Любая помощь приветствуется.

Спасибо

...