无法让PELU或SineRelu激活函数在keras中使用贡献modu

2024-10-01 00:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图用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))

Tags: thefromimportnumpyaddmodellayersrandom
2条回答

在回答之前,我发现了一个关于SineReLU on Stack Overflow的问题,我感到有点惊讶。我是写函数的人。:)

因此,Keras上的自定义激活称为高级激活,它们扩展了keras.layers下的Layer类。在Keras-Contrib包中进行了一些更改之后,在1.0版本准备之前,SineReLU和其他高级激活一起转移到了keras_contrib.layers.advanced_activations包中。在

但要回答您的问题,要使用SineReLU,或任何其他高级激活,请执行以下操作:

from keras_contrib.layers.advanced_activations.sinerelu import SineReLU
...
model = Sequential()
model.add(Dense(128, input_shape = (784,)))
model.add(SineReLU())
model.add(Dropout(0.2))
...

你也可以微调SineReLU。要了解其epsilon参数的更多信息,请查看此处的文档。在

我还写了一篇关于它的中篇报道,并在会议上就这个功能做了几次演讲。您可以在此处找到更多资源:

https://medium.com/@wilder.rodrigues/sinerelu-an-alternative-to-the-relu-activation-function-e46a6199997d

问题是没有正确传递激活,层的activation参数的字符串格式只适用于内置激活,而不是自定义激活。在

另外,由于PELU有参数,它是作为一个层来实现的,而不是作为一个独立的激活函数来实现的,所以您需要这样添加它:

model = Sequential()
model.add(Dense(12, input_dim=8))
model.add(PELU())
model.add(Dense(8))
model.add(PELU())
model.add(Dense(1, activation='sigmoid'))

相关问题 更多 >