ValueError: Shape должен иметь ранг 0, но является рангом 2 для 'cond / Switch' (op: 'Switch') с входными формами: [1,1], [1,1] - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы представить новую функцию активации в сети с помощью tenorflow. Тем не менее, я получаю ошибку формы ввода. Где я должен измениться?

Это новый код слоя.

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))


    return (newtensor)

Это сеть.

    self.inputs = tf.placeholder(shape=[1,4], dtype=tf.float32)

    self.weights1 = tf.Variable(tf.truncated_normal([4,4]))

    self.bias1 = tf.Variable(tf.zeros(shape=[1,4]))

    self.weights2 = tf.Variable(tf.truncated_normal([4,4]))

    self.bias2 = tf.Variable(tf.zeros(shape=[1, 4]))

    self.weights3 = tf.Variable(tf.truncated_normal([4,1]))

    self.bias3 = tf.Variable(tf.zeros([1,1]))

    self.layer1 = tf.tanh(tf.matmul(self.inputs, self.weights1) + self.bias1)

    self.layer2 = tf.tanh(tf.matmul(self.layer1, self.weights2) + self.bias2)


    self.layer3 = smooth_relu(tf.matmul(self.layer2, self.weights3) + self.bias3)


    self.output_layer = self.layer3

    self.optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)

    self.nextQ = tf.placeholder(shape=[1,1], dtype=tf.float32)

    self.loss = tf.reduce_sum(tf.square((self.nextQ - self.output_layer)))

    self.trainer = self.optimizer.minimize(self.loss)

    self.sess = tf.Session()

    self.sess.run(tf.global_variables_initializer())

ошибка

Shape должен иметь ранг 0, но ранг 2 для 'cond / Switch' (op: 'Switch') с формами ввода: [1,1], [1,1].

...