如何调用Sequential()类中源代码中不存在的函数?

我对机器学习还比较新手,正在尝试在Keras中实现我自己的自定义层。我找到了一些教程,看起来相对简单直观。然而,我不明白如何在Sequential()中实现我的新自定义层。例如,我从TensorFlow网站上拿了一个分类问题(https://www.tensorflow.org/tutorials/keras/basic_text_classification),在这里分享给大家方便参考:

from __future__ import absolute_import, division, print_functionimport tensorflow as tffrom tensorflow import kerasimport numpy as npimdb = keras.datasets.imdb(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)# A dictionary mapping words to an integer indexword_index = imdb.get_word_index()# The first indices are reservedword_index = {k:(v+3) for k,v in word_index.items()}word_index["<PAD>"] = 0word_index["<START>"] = 1word_index["<UNK>"] = 2  # unknownword_index["<UNUSED>"] = 3reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])def decode_review(text):    return ' '.join([reverse_word_index.get(i, '?') for i in text])train_data = keras.preprocessing.sequence.pad_sequences(train_data,                                                        value=word_index["<PAD>"],                                                        padding='post',                                                        maxlen=256)test_data = keras.preprocessing.sequence.pad_sequences(test_data,                                                       value=word_index["<PAD>"],                                                       padding='post',                                                       maxlen=256)# input shape is the vocabulary count used for the movie reviews (10,000 words)vocab_size = 10000model = keras.Sequential()model.add(keras.layers.Embedding(vocab_size, 16))model.add(keras.layers.GlobalAveragePooling1D())model.add(keras.layers.Dense(16, activation=tf.nn.relu))model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))model.summary()model.compile(optimizer='adam',              loss='binary_crossentropy',              metrics=['acc'])x_val = train_data[:10000]partial_x_train = train_data[10000:]y_val = train_labels[:10000]partial_y_train = train_labels[10000:]history = model.fit(partial_x_train,                    partial_y_train,                    epochs=40,                    batch_size=512,                    validation_data=(x_val, y_val),                    verbose=1)results = model.evaluate(test_data, test_labels)print(results)

我需要更改keras.Sequential()的源代码吗,还是有更简单的方法?

此外,查看Sequential()类的源代码让我感到疑惑:我无法理解像’summary()’、’compile()’、’fit()’和’evaluate()’这样的函数是如何被调用的,因为这些函数在该类源代码中根本没有提供。这里是Sequential()的源代码:

https://github.com/keras-team/keras/blob/a1397169ddf8595736c01fcea084c8e34e1a3884/keras/engine/sequential.py


回答:

Sequential 是一个模型,而不是一个层。

您提到的函数(summarycompilefitevaluate)是在这里的Model类中实现的,因为Sequential是Model的子类。

如果您正在编写自定义层,您应该继承Layer类,而不是Model或Sequential。

您需要实现buildcallcompute_output_shape来创建您自己的层。

Keras文档中有一些示例供参考:

from keras import backend as Kfrom keras.layers import Layerclass MyLayer(Layer):    def __init__(self, output_dim, **kwargs):        self.output_dim = output_dim        super(MyLayer, self).__init__(**kwargs)    def build(self, input_shape):        # Create a trainable weight variable for this layer.        self.kernel = self.add_weight(name='kernel',                                   shape=(input_shape[1], self.output_dim),                                  initializer='uniform',                                  trainable=True)        super(MyLayer, self).build(input_shape)  # Be sure to call this at the end    def call(self, x):        return K.dot(x, self.kernel)    def compute_output_shape(self, input_shape):        return (input_shape[0], self.output_dim)

要使用它,从您放置MyLayer类的文件中导入MyLayer类,然后像使用默认的Keras层一样添加它:

from custom.layers import MyLayermodel = keras.Sequential()model.add(MyLayer())

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注