Как загрузить другие веса в tenorflow-hub.module?
Я хочу использовать ELMo в керасе, и для этого я хочу использовать tenorflow-hub, вероятно, похожий на ( https://github.com/strongio/keras-elmo/blob/master/Elmo%20Keras.ipynb или https://tfhub.dev/google/elmo/2).
Моя проблема в том, что я хочу использовать предварительно обученную модель, которая не использует слова, но обучается на белках (последовательности аминокислот), и она должна быть обучаемой с моими представленными данными. Моя идея состоит в том, что мне просто нужно загрузить веса предварительно обученной белковой модели в файле tenor-hub.module, чтобы достичь этого. У меня есть вес модели факела, и у меня есть модуль тензорного потока.
# i can create a Elmo embedding layer for "normal text" which is pretrained and also trainable
class ElmoEmbeddingLayer(Layer):
def __init__(self, **kwargs):
self.dimensions = 1024
self.trainable=True
super(ElmoEmbeddingLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.elmo = hub.Module('https://tfhub.dev/google/elmo/2', trainable=self.trainable,
name="{}_module".format(self.name))
self.trainable_weights += K.tf.trainable_variables(scope="^{}_module/.*".format(self.name))
super(ElmoEmbeddingLayer, self).build(input_shape)
def call(self, x, mask=None):
result = self.elmo(K.squeeze(K.cast(x, tf.string), axis=1),
as_dict=True,
signature='default',
)['default']
return result
def compute_mask(self, inputs, mask=None):
return K.not_equal(inputs, '--PAD--')
def compute_output_shape(self, input_shape):
return (input_shape[0], self.dimensions)
input_text = layers.Input(shape=(1,), dtype="string")
embedding = ElmoEmbeddingLayer()(input_text)
dense = layers.Dense(256, activation='relu')(embedding)
pred = layers.Dense(1, activation='sigmoid')(dense)
model = models.Model(inputs=[input_text], outputs=pred)
# i also have an embedder of with the weights i want, but this one is not trainable with keras
cwd = os.getcwd()
model_dir = Path('../seqvec/uniref50_v2/')
weights = model_dir / 'weights.hdf5'
options = model_dir / 'options.json'
seqvec = ElmoEmbedder(options,weights,cuda_device=-1) # cuda_device=-1 for CPU
Если вы не знаете, как загружать веса в тензорном узле, но у вас есть другой обходной путь, который позволяет мне использовать ElmoEmbedder с обучаемыми весами, пожалуйста, ответьте также.