我是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'
答案 0 :(得分:0)
层softmax和激活函数softmax之间的KERS不同。 See here.由于错误提示,您正在尝试传递需要功能的整个层。最简单的解决方案是只传递一个字符串:
output_layer = Dense(units=500, activation='softmax', kernel_initializer='uniform')
另一种可能性是不将激活功能传递给该层,然后再应用一个激活层。