Вывод ошибок при встраивании слоев tf-hub с помощью Conv или Rnn
Вот код, идея в том, что я хочу создать многоязычный классификатор настроений, но здесь проблема: (tenorflow 2.0.1), (tf-hub 0.7.0)
import tensorflow as tf
import tensorflow_hub as hub
ml_module = hub.load('https://tfhub.dev/google/universal-sentence-encoder-multilingual/3')
module = hub.KerasLayer(ml_module , dtype=tf.string, trainable=False, name='bert_embedding')
input_text = tf.keras.Input((), dtype=tf.string, name='input_text')
embedding = module(input_text)
conv1 = tf.keras.layers.Conv1D(32, 2, padding='valid', activation='relu', strides=1)(embedding)
dense1 = tf.keras.layers.Dense(512, activation="relu")(conv1)
layer1 = tf.keras.layers.Dense(9, name='sentiment')(dense1)
model = tf.keras.models.Model(inputs=input_text, outputs=layer1)
ValueError: Input 0 of layer conv1d_3 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 512]
Возможно, я могу попробовать с помощью лямбда-функции keras изменить размер вывода встраивания, но я не нашел способа заставить его работать
У вас есть идеи?
Спасибо
2 ответа
Вы можете добавить Reshape
слой для изменения формы с [ None , 512 ]
к [ None , 512 , 1 ]
.
import tensorflow as tf
import tensorflow_hub as hub
ml_module = hub.load('https://tfhub.dev/google/universal-sentence-encoder-multilingual/3')
module = hub.KerasLayer(ml_module , dtype=tf.string, trainable=False, name='bert_embedding')
input_text = tf.keras.Input((), dtype=tf.string, name='input_text')
embedding = module(input_text)
reshape = tf.keras.layers.Reshape( target_shape=( None , 512 , 1 ) )( embedding )
conv1 = tf.keras.layers.Conv1D(32, 2, padding='valid', activation='relu', strides=1)(reshape)
dense1 = tf.keras.layers.Dense(512, activation="relu")(conv1)
layer1 = tf.keras.layers.Dense(9, name='sentiment')(dense1)
model = tf.keras.models.Model(inputs=input_text, outputs=layer1)
Ой, спасибо, Шубхам, это работает =D
Это код, чтобы он работал
import tensorflow as tf
import tensorflow_hub as hub
ml_module = hub.load('https://tfhub.dev/google/universal-sentence-encoder-multilingual/3')
module = hub.KerasLayer(ml_module , dtype=tf.string, trainable=False, name='bert_embedding')
input_text = tf.keras.Input((), dtype=tf.string, name='input_text')
embedding = module(input_text)
reshape = tf.keras.layers.Reshape(target_shape=(512, 1))(embedding)
conv1 = tf.keras.layers.Conv1D(filters, kernel, padding='valid', activation='relu', strides=1)(reshape)
gpool1 = tf.keras.layers.GlobalMaxPooling1D()(conv1)
dense1 = tf.keras.layers.Dense(dims, activation="relu")(gpool1)
dropout1 = tf.keras.layers.Dropout(0.2)(dense1)
layer1 = tf.keras.layers.Dense(n_classes, name='sentiment')(dropout1)
model = tf.keras.models.Model(inputs=input_text, outputs=layer1)