在keras中创建自定义激活功能

时间:2018-11-29 21:27:01

标签: python tensorflow machine-learning keras deep-learning

我正在尝试在keras中创建自己的自定义激活函数,如果x <0,则返回0,如果x> = 0,则返回1

 from keras.layers import Dense
 from keras.models import Sequential
 from keras.layers import Activation
 import tensorflow as tf


def hard_lim(x):

     zero = tf.convert_to_tensor(0., x.dtype.base_dtype)

     one = tf.convert_to_tensor(1., x.dtype.base_dtype)

     sess = tf.Session()

     if sess.run(tf.greater_equal(x, zero)):
         return one
     else:
         return zero

     model = Sequential()

     model.add(Dense(4, input_dim=2, activation=Activation(hard_lim))
     model.add(Dense(2, activation=Activation(hard_lim))
     model.add(Dense(1, activation=Activation(hard_lim))

这给我这个错误

 InvalidArgumentError (see above for traceback): You must feed a value           
 for placeholder tensor '1_input' with dtype float and shape [?,2]

我该如何解决?

1 个答案:

答案 0 :(得分:1)

  

警告:您要执行的此操作没有渐变,因此无法进行训练。您将看到错误消息,例如“操作没有针对渐变的操作”或类似“不支持任何类型”的消息。

     

作为激活的一种解决方法,我相信“ relu”激活将是最接近和最好的选择,其优点是在大多数模型中都非常流行和使用。

在Keras中,您通常不运行会话。对于自定义操作,您可以使用backend函数来创建函数。

因此,您将使用Lambda层:

import keras.backend as K

def hardlim(x):
   return K.cast(K.greater_equal(x,0), K.floatx())

然后可以在层中使用activation=hardlim