keras,model(数据)是什么意思

时间:2018-08-29 20:48:14

标签: python model keras sequential

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)”这句话是干什么的? “模型”在这里是Class顺序变量,我从未见过这样的用法。 该代码取自##版权所有(C)2016,尼古拉斯·卡里尼

1 个答案:

答案 0 :(得分:0)

很好的问题,这取决于data是什么,但是代码片段肯定会误导我们。要澄清:

  • 如果直接调用模型,则需要传递 tensors ,它的作用类似于另一层。例如model(anotherlayer)。但是,如果您传递实际数据(例如NumPy错误),则会出现此错误:
      

    ValueError:调用了不是符号张量的输入来调用了sequence serial_1。收到的类型:。全部输入:[array(...)]。该层的所有输入都应为张量。

  • 如果要进行预测(例如传递一些数字数据并运行网络/传播值/计算输出),则需要model.predict(data),这就是为什么它具有预测功能,因此会产生误导的原因。

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