当我试图用SineRELU或PELU替换工作代码中的LeakyRELU或relu时。我一直收到这个错误:
ValueError: Unknown activation function:PELU
我正在使用keras.contrib
。我附上了示例代码。我已经试过几次了。任何实现这一点的方法都将得到赞赏。在
from keras.layers import Dense, Input, LeakyReLU, UpSampling2D, Conv2D, Concatenate
from keras_contrib.layers import SineReLU
from keras.models import Model,load_model, Sequential
from keras.optimizers import Adam
# Recommended method; requires knowledge of the underlying architecture of the model
from keras_contrib.layers import PELU
import numpy
# fix random seed for reproducibility
numpy.random.seed(7)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='PELU'))
model.add(Dense(8, activation='PELU'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10)
# evaluate the model
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
# Create your first MLP in Keras
from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
numpy.random.seed(7)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10)
# evaluate the model
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
在回答之前,我发现了一个关于SineReLU on Stack Overflow的问题,我感到有点惊讶。我是写函数的人。:)
因此,Keras上的自定义激活称为高级激活,它们扩展了
keras.layers
下的Layer类。在Keras-Contrib包中进行了一些更改之后,在1.0版本准备之前,SineReLU和其他高级激活一起转移到了keras_contrib.layers.advanced_activations
包中。在但要回答您的问题,要使用
SineReLU
,或任何其他高级激活,请执行以下操作:你也可以微调SineReLU。要了解其
epsilon
参数的更多信息,请查看此处的文档。在我还写了一篇关于它的中篇报道,并在会议上就这个功能做了几次演讲。您可以在此处找到更多资源:
https://medium.com/@wilder.rodrigues/sinerelu-an-alternative-to-the-relu-activation-function-e46a6199997d
问题是没有正确传递激活,层的
activation
参数的字符串格式只适用于内置激活,而不是自定义激活。在另外,由于PELU有参数,它是作为一个层来实现的,而不是作为一个独立的激活函数来实现的,所以您需要这样添加它:
相关问题 更多 >
编程相关推荐