Я хотел бы представить новую функцию активации в сети с помощью 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].