我尝试运行以下代码,但出现错误。我是否遗漏了代码中的某些内容?
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
from keras.callbacks import ModelCheckpoint
from keras.models import load_model
from keras.optimizers import Adam
from keras.regularizers import l2
from keras.activations import relu, elu, linear, sigmoid
def build_fc_model(layers):
fc_model = Sequential()
for i in range(len(layers)-1):
fc_model.add( Dense(layers[i],layers[i+1]) )#, W_regularizer=l2(0.1)) )
fc_model.add( Dropout(0.5) )
if i < (len(layers) - 2):
fc_model.add( Activation('relu') )
fc_model.summary()
return fc_model
fc_model_1 = build_fc_model([2, 256, 512, 1024, 1])
这是错误消息:
TypeError: Could not interpret activation function identifier: 256
密集层中的第二个参数被视为激活函数,而不是神经元的数量。您已将神经元的数量作为激活函数传递给密集层对象。
在密集层的定义中,您传递了两个参数:
layers[i]
和layers[i+1]
。
基于 Dense
函数的文档
here: 第一个参数是单元(神经元)的数量,第二个参数是激活函数。因此,它将
layers[i+1]
视为无法被 Dense
函数识别的激活函数。
推论: 您不需要将下一层神经元传递到密集层。因此删除
layers[i+1]
参数。
此外,您必须为模型定义一个输入层,并将模型的输入形状传递给它。
因此,修改后的代码应该是这样的:
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
from keras.callbacks import ModelCheckpoint
from keras.models import load_model
from keras.optimizers import Adam
from keras.regularizers import l2
from keras.activations import relu, elu, linear, sigmoid
from keras.layers import InputLayer #import input layer
def build_fc_model(layers):
fc_model = Sequential()
fc_model.add(InputLayer(input_shape=(784,))) #add input layer and specify it's shape
for i in range(len(layers)-1):
fc_model.add( Dense(layers[i]) ) #remove unnecessary second argument
if i < (len(layers) - 2):
fc_model.add( Activation('relu') )
fc_model.add( Dropout(0.5) )
fc_model.summary()
return fc_model
fc_model_1 = build_fc_model([2, 256, 512, 1024, 1])