我正在使用 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) 张量流中是否有logit函数,即sigmoid函数的逆函数?我已经搜索过谷歌,但没有找到任何。
machine-learning inverse neural-network tensorflow activation-function
我正在关注带有 Keras 教程的官方 TensorFlow,但我被困在这里:预测房价:回归 - 创建模型
为什么将激活函数用于预测连续值的任务?
代码是:
def build_model():
model = keras.Sequential([
keras.layers.Dense(64, activation=tf.nn.relu,
input_shape=(train_data.shape[1],)),
keras.layers.Dense(64, activation=tf.nn.relu),
keras.layers.Dense(1)
])
optimizer = tf.train.RMSPropOptimizer(0.001)
model.compile(loss='mse', optimizer=optimizer, metrics=['mae'])
return model
Run Code Online (Sandbox Code Playgroud) regression machine-learning neural-network keras activation-function
这可能是一个非常基本/微不足道的问题。
对于负输入,
下面提到的是我的问题:
- 为什么上述所有激活函数都对负输入值饱和。
- 如果我们想预测负目标值,是否有任何激活函数。
谢谢你。
这里有隐藏的陷阱吗?即使是流行的ReLU也是max(0,x),我们将允许最大值传递并将负数剪辑为零.如果我们同时允许正值和负值,会出现什么问题?或者为什么我们在ReLU中将负值剪切为零.
artificial-intelligence machine-learning neural-network deep-learning activation-function
我正在使用 Keras 的 Sequential 模型和 DENSE 层类型。我写了一个递归计算预测的函数,但预测结果还差得很远。我想知道用于我的数据的最佳激活函数是什么。目前我正在使用 hard_sigmoid 函数。输出数据值的范围为 5 到 25。输入数据的形状为 (6,1),输出数据为单个值。当我绘制预测时,它们永远不会减少。感谢您的帮助!!
# create and fit Multilayer Perceptron model
model = Sequential();
model.add(Dense(20, input_dim=look_back, activation='hard_sigmoid'))
model.add(Dense(16, activation='hard_sigmoid'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=200, batch_size=2, verbose=0)
#function to predict using predicted values
numOfPredictions = 96;
for i in range(numOfPredictions):
temp = [[origAndPredictions[i,0],origAndPredictions[i,1],origAndPredictions[i,2],origAndPredictions[i,3],origAndPredictions[i,4],origAndPredictions[i,5]]]
temp = numpy.array(temp)
temp1 = model.predict(temp)
predictions = numpy.append(predictions, temp1, axis=0)
temp2 = []
temp2 = [[origAndPredictions[i,1],origAndPredictions[i,2],origAndPredictions[i,3],origAndPredictions[i,4],origAndPredictions[i,5],predictions[i,0]]]
temp2 = numpy.array(temp2)
origAndPredictions = numpy.vstack((origAndPredictions, temp2))
Run Code Online (Sandbox Code Playgroud)
更新:我使用此代码来实现 swish。
from keras.backend …Run Code Online (Sandbox Code Playgroud) 我想具体知道如何让神经网络中的神经元被激活(激活函数后每个神经元的输出)
当我在 Tensorflow 2 中的模型推理过程中给出输入时,如何获得序列模型的所有神经元的激活?