keras,模型(数据)的含义是什么

keras, what is the meaning of model(data)

class MNISTModel:
    def __init__(self, restore, session=None):
        self.num_channels = 1
        self.image_size = 28
        self.num_labels = 10

        model = Sequential()

        model.add(Conv2D(32, (3, 3),
                         input_shape=(28, 28, 1)))
        model.add(Activation('relu'))
        model.add(Conv2D(32, (3, 3)))
        model.add(Activation('relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))

        model.add(Conv2D(64, (3, 3)))
        model.add(Activation('relu'))
        model.add(Conv2D(64, (3, 3)))
        model.add(Activation('relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))

        model.add(Flatten())
        model.add(Dense(200))
        model.add(Activation('relu'))
        model.add(Dense(200))
        model.add(Activation('relu'))
        model.add(Dense(10))
        model.load_weights(restore)

        self.model = model
        print('selfMNIST')

    def predict(self, data):
        tmp=self.model(data)  #Question is here
        return tmp

这句话"tmp=self.model(data)"是干什么用的? "model" 这里是Class sequential 的变量,我没见过这样的用法。 此代码取自## Copyright (C) 2016, Nicholas Carlini

问得好,这取决于 data 是什么,但肯定是代码片段 具有误导性 。澄清一下:

  • 如果你直接调用模型你需要传递张量,它就像另一层。 model(anotherlayer) 例如有效。但是,如果您传递实际数据(例如 NumPy 错误),则会出现此错误:

    ValueError: Layer sequential_1 was called with an input that isn't a symbolic tensor. Received type: . Full input: [array(...)]. All inputs to the layer should be tensors.

  • 如果你想预测,比如传递一些数字数据和 运行 网络/传播值/计算输出,那么你需要 model.predict(data) 这就是为什么它会产生误导,因为它是预测功能。

我的猜测是作者需要将模型链接在一起并编辑 class 的 predict 函数,而不是创建不同的 class 函数。