Введен новый слой с использованием tenorflow - PullRequest
0 голосов
/ 27 декабря 2018

Я хотел бы представить новый слой в качестве функции активации в тензорном потоке.Однако есть ошибки, которые не могут быть решены.Это код нового слоя.

def smooth_relu(tensor):
    e=0.15
    alpha=0.005

    def smooth(tensor):

            smoothtensor=tf.cond(tensor<(e+alpha) ,lambda: (tensor-alpha)*(tensor-alpha),lambda:e*((tensor-alpha)-self.e*0.5),    tf.cond(
                        pred,
                        true_fn=None,
                        false_fn=None,
                        strict=False,
                        name=None,
                        fn1=None,
                        fn2=None
                        ))


            return (smoothtensor)



    newtensor=tf.cond(tensor<0 ,lambda :0, lambda:smooth(tensor))
    # In addition to return the result, we return my_random for initializing on each
    # iteration and alpha to check the final value used.

    return (newtensor)

Это ошибка.

ValueError: Shape must be rank 0 but is rank 2 for 'cond/Switch' (op: 'Switch') with input shapes: [1,1], [1,1].

1 Ответ

0 голосов
/ 27 декабря 2018

Это потому, что нет атрибутов, которые можно назначить для smoothtensor как dtype

Ваша ошибка в этой строке:

def smooth(tensor): `smoothtensor=tf.cond(tensor<(e+alpha) ,lambda: (tensor-alpha)*(tensor-alpha),lambda:e*((tensor-alpha)-self.e*0.5),dtype=tf.float32)`

доступные атрибуты, которые вы можете назначить:

tf.cond(
    pred,
    true_fn=None,
    false_fn=None,
    strict=False,
    name=None,
    fn1=None,
    fn2=None
)

РЕДАКТИРОВАТЬ:

Просто добавьте парантез в конце кода строки ... он отсутствует

...