首页 > 解决方案 > Keras 中的 Softmatx 激活

问题描述

我是 Keras 的新手。

我想用 Keras 建立一个 CNN 网络。

在我想添加一个 softmax 密集层之前很好。

错误是TypeError: softmax() got an unexpected keyword argument 'axis'

我搜索了 Keras 并试图修复它:

from keras.layers import Softmax
output_layer = Dense(units=n_classes, activation=Softmax(axis=-1),  kernel_initializer='uniform')

但是,它仍然给出错误和警告:

UserWarning: Do not pass a layer instance (such as Softmax) as the activation argument of another layer. Instead, advanced activation layers should be used just like any other layer in a model.

应用softmax的正确方法是什么?

非常感谢。

cnn = Sequential()
kernelSize = (3, 3)
ip_activation = 'relu'
ip_conv_0 = Conv2D(filters=32, kernel_size=kernelSize, input_shape=im_shape, activation=ip_activation)
cnn.add(ip_conv_0)
ip_conv_0_1 = Conv2D(filters=64, kernel_size=kernelSize, activation=ip_activation)
cnn.add(ip_conv_0_1)
pool_0 = MaxPool2D(pool_size=(2, 2), strides=(2, 2), padding="same")
cnn.add(pool_0)
drop_layer_0 = Dropout(0.2)
cnn.add(drop_layer_0)
flat_layer_0 = Flatten()
cnn.add(Flatten())
h_dense_0 = Dense(units=128, activation=ip_activation, kernel_initializer='uniform')
cnn.add(h_dense_0)
h_dense_1 = Dense(units=64, activation=ip_activation, kernel_initializer='uniform')
cnn.add(h_dense_1)

op_activation = 'softmax'
output_layer = Dense(units=n_classes, activation=op_activation, kernel_initializer='uniform')
cnn.add(output_layer)#<---------error

TypeError: softmax() got an unexpected keyword argument 'axis'

标签: pythonkeras

解决方案


Keras 在层 softmax 和激活函数 softmax 之间有所不同。看这里。正如错误所暗示的那样,您正在尝试传递需要函数的整个层。最简单的解决方案是只传递一个字符串:

output_layer = Dense(units=500, activation='softmax',  kernel_initializer='uniform')

另一种可能性是不向层传递激活函数,然后应用激活层。


推荐阅读