3DCNN把函数式模型改成序贯式模型
函数式模型:
#需要把最后的激活函数改成"softmax"
#from keras.models import Model
def build_model():
inputs_1 = Input(shape=(input_shape))
x = Conv3D(filters=64,
kernel_size=(3,3,3),
strides=(1,1,1),
activation='relu',
padding='same')(inputs_1)
x = MaxPool3D(pool_size=2)(x)
x = Conv3D(filters=64,
kernel_size=(3,3,3),
strides=(1,1,1),
activation='relu',
padding='same')(x)
x = MaxPool3D(pool_size=2)(x)
x = Conv3D(filters=128,
kernel_size=(3,3,3),
strides = (1,1,1),
activation='relu',
padding='same')(x)
x = MaxPool3D(pool_size=2)(x)
x = Conv3D(filters=128,
kernel_size=(3,3,3),
strides=(1,1,1),
activation='relu',
padding='same')(x)
x = MaxPool3D(pool_size=2)(x)
x = Flatten()(x)
outputs = Dense(output_shape,activation = 'softmax')(x)
model = Model(inputs=inputs_1, outputs=outputs)
return model
#model.summary()
改成序贯式模型时:
去掉def build_model():和return model
把中间的语句缩进掉
记得检查最后一层的激活函数是否为softmax
#单独测试3DCNN
#需要把最后的激活函数改成"softmax"
#from keras.models import Model
#def build_model():
inputs_1 = Input(shape=(input_shape))
x = Conv3D(filters=64,
kernel_size=(3,3,3),
strides=(1,1,1),
activation='relu',
padding='same')(inputs_1)
x = MaxPool3D(pool_size=2)(x)
x = Conv3D(filters=64,
kernel_size=(3,3,3),
strides=(1,1,1),
activation='relu',
padding='same')(x)
x = MaxPool3D(pool_size=2)(x)
x = Conv3D(filters=128,
kernel_size=(3,3,3),
strides = (1,1,1),
activation='relu',
padding='same')(x)
x = MaxPool3D(pool_size=2)(x)
x = Conv3D(filters=128,
kernel_size=(3,3,3),
strides=(1,1,1),
activation='relu',
padding='same')(x)
x = MaxPool3D(pool_size=2)(x)
x = Flatten()(x)
outputs = Dense(output_shape,activation = 'softmax')(x)
model = Model(inputs=inputs_1, outputs=outputs)
#return model
#model.summary()
接下来是
model = build_model()
#adam = Adam(lr=0.001)
model.compile(optimizer = 'sgd',loss = 'categorical_crossentropy',metrics = ['acc'])
model.fit(data,label,batch_size = 1,validation_split = 0.3,epochs = 100)
#这里的激活函数为sgd

浙公网安备 33010602011771号