我可以在数学中找到激活函数列表,但在代码中找不到。因此,我想如果应该有一个列表,那么这将是代码中此列表的正确位置。从以下2个链接中的算法翻译开始:https : //en.wikipedia.org/wiki/Activation_function https://stats.stackexchange.com/questions/115258/comprehensive-list-of-activation-functions-in神经网络的利弊
我们的目标是拥有一个激活类(带有函数及其派生类),并且可以通过UI轻松访问。
编辑:我的尝试
using UnityEngine;
using System.Collections;
using System;
///<summary>
///Activation Functions from:
///https://en.wikipedia.org/wiki/Activation_function
///https://stats.stackexchange.com/questions/115258/comprehensive-list-of-activation-functions-in-neural-networks-with-pros-cons
///D infront means the Deravitive of the function
///x is the input of one perceptron. a is the alpha value sometimes needed.
///</summary>
[System.Serializable]
public class Activation
{
public ActivationType activationType;
public Activation(ActivationType type)
{
activationType = type;
}
public double AFunction(double x)
{
switch(activationType)
{
case ActivationType.Identity:
return Identity(x);
case ActivationType.BinaryStep:
return BinaryStep(x);
case ActivationType.Logistic:
return Logistic(x);
case ActivationType.Tanh:
return …Run Code Online (Sandbox Code Playgroud) 用于 softmax 激活的 Keras文档指出,我可以指定激活应用于哪个轴。我的模型应该输出一个n × k矩阵M,其中Mij是第i个字母是符号j的概率。
n = 7 # number of symbols in the ouput string (fixed)
k = len("0123456789") # the number of possible symbols
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=((N,))))
...
model.add(layers.Dense(n * k, activation=None))
model.add(layers.Reshape((n, k)))
model.add(layers.Dense(output_dim=n, activation='softmax(x, axis=1)'))
Run Code Online (Sandbox Code Playgroud)
最后一行代码无法编译,因为我不知道如何k为 softmax 激活正确指定轴(在我的情况下为轴)。
我有一个关于带有正负奖励环境的适当激活功能的问题。
我认为,在强化学习中,我们的产出应该是所有可能采取的行动的预期回报。由于某些选项的收益为负,因此我们希望输出范围包括负数。
这使我相信唯一合适的激活函数将是线性或正切。但是,我看到许多ReRL论文都在使用Relu。
有两个问题:
如果确实要同时具有负输出和正输出,那么您是否仅限于正切和线性?
是否有更好的策略(如果可能)扩大奖励,使奖励都处于正域(即代替[-1,0,1],[0、1、2]),以便模型能够利用替代激活功能?
machine-learning reinforcement-learning q-learning activation-function
如何在不使用Tensorflow的情况下在Python中实现Leaky ReLU的派生类?
有没有比这更好的方法了?我希望函数返回一个numpy数组
def dlrelu(x, alpha=.01):
# return alpha if x < 0 else 1
return np.array ([1 if i >= 0 else alpha for i in x])
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助
对于 CNN 架构,我想使用 SpatialDropout2D 层而不是 Dropout 层。另外我想使用 BatchNormalization。到目前为止,我总是直接在卷积层之后但在激活函数之前设置 BatchNormalization,就像 Ioffe 和 Szegedy 的论文中提到的那样。我总是在 MaxPooling2D 层之后设置 dropout 层。
在https://machinelearningmastery.com/how-to-reduce-overfit-with-dropout-regularization-in-keras/ 中, SpatialDropout2D 直接设置在卷积层之后。
我发现我现在应该以何种顺序应用这些层相当令人困惑。我还在 Keras 页面上读到 SpatialDropout 应该直接放在 ConvLayer 后面(但我再也找不到这个页面了)。
以下顺序是否正确?
ConvLayer - SpatialDropout - BatchNormalization - 激活函数 - MaxPooling
我真的希望得到提示并提前谢谢你
更新 我的目标实际上是在以下 CNN 架构 dropout 中交换空间 dropout:
model = Sequential()
model.add(Conv2D(32,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Conv2D(64,(3,3))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(10))
model.add(Activation('softmax'))
Run Code Online (Sandbox Code Playgroud) 我正在使用 sknn 包来构建神经网络。为了优化我正在使用的数据集的神经网络参数,我使用了进化算法。由于该包允许我构建一个神经网络,其中每一层都有不同的激活函数,我想知道这是否是一个实用的选择,或者我是否应该每个网络只使用一个激活函数?在神经网络中具有多个激活函数对神经网络有害、没有损害还是有益?
另外,我应该拥有的每层神经元的最大数量是多少,我应该拥有的每个网络的最大层数是多少?
我正在尝试创建一个激活函数以在我的 keras 模型中使用。
基本上,我想要的是一个只有两位小数的 sigmoid 函数。所以我试图像这样创建我自己的激活函数:
def mySigmoid(x):
return np.around(K.sigmoid(x), decimals=2)
Run Code Online (Sandbox Code Playgroud)
进而:
get_custom_objects().update({'mySigmoid': Activation(mySigmoid)})
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,我这样做了。
有人可以帮帮我吗?
非常感谢
堆栈跟踪:
AttributeError Traceback (most recent call last)
<ipython-input-52-891a9f63ca56> in <module>()
3 model.add(Dense(30, activation='softmax'))
4
----> 5 model.add(Dense(10, activation='mySigmoid'))
6 model.summary()
7 sgd = optimizers.SGD(lr=0.1, decay=1e-5, momentum=0.3, nesterov=True)
/usr/local/lib/python2.7/dist-packages/keras/models.pyc in add(self, layer)
473 output_shapes=[self.outputs[0]._keras_shape])
474 else:
--> 475 output_tensor = layer(self.outputs[0])
476 if isinstance(output_tensor, list):
477 raise TypeError('All layers in a Sequential model '
/usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc in __call__(self, inputs, **kwargs)
600
601 # Actually call …Run Code Online (Sandbox Code Playgroud) 也许这是一个非常愚蠢的问题,但我找不到如何在Keras中使用categorical_hinge的示例。我进行分类,目标是shape(,1)[-1,0,1],所以我有3个类别。使用功能性API,我像这样设置了输出层:
输出=密集(1,名称='输出',激活='tanh',kernel_initializer ='lecun_normal')(output1)
然后我申请:
model.compile(optimizer = adam,损失= {'输出':'categorical_hinge'},指标= ['准确性'])
结果是该模型正在收敛,但精度接近0。我该怎么做?
使用 Keras 设置神经网络时,您可以使用Sequential模型或Functional API. 我的理解是前者易于设置和管理,并且作为层的线性堆栈运行,而函数式方法对于更复杂的架构非常有用,尤其是那些涉及共享内部层输出的架构。我个人喜欢使用函数式 API 来实现多功能性,但是,在使用 LeakyReLU 等高级激活层时遇到困难。当使用标准激活时,在顺序模型中可以写:
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
类似地,在函数式 API 中,可以将上述内容写为:
inpt = Input(shape = (100,))
dense_1 = Dense(32, activation ='relu')(inpt)
out = Dense(10, activation ='softmax')(dense_2)
model = Model(inpt,out)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
但是,当使用 LeakyReLU 和 PReLU 等高级激活时,在该顺序模型中,我们将它们编写为单独的层。例如:
model = Sequential()
model.add(Dense(32, input_dim=100))
model.add(LeakyReLU(alpha=0.1))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
现在,我假设在函数式 API 方法中执行等效操作:
inpt = Input(shape = (100,))
dense_1 = Dense(32)(inpt)
LR = LeakyReLU(alpha=0.1)(dense_1)
out = …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常基本/微不足道的问题。
对于负输入,
下面提到的是我的问题:
- 为什么上述所有激活函数都对负输入值饱和。
- 如果我们想预测负目标值,是否有任何激活函数。
谢谢你。