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
posted @ 2025-12-18 16:17  点影成金  阅读(11)  评论(0)    收藏  举报