Поменяйте местами новинки с ELMo в простом уроке colab - PullRequest
6 голосов
/ 30 апреля 2019

Я работаю над этим ноутбуком colab:

https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_text_classification.ipynb

Я бы хотел заменить поворотные вложения gnews на вложения ELMo.

Итак, замените

model = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"

с:

model = "https://tfhub.dev/google/elmo/2"

Здесь есть множество вещей, которые меняются, например, необходимость

tf.compat.v1.disable_eager_execution()

Но я не понимаю форму графика, который мне нужен, чтобы успешно выполнить эту замену. В частности, я вижу.

#model = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"
model = "https://tfhub.dev/google/elmo/2"

elmo = hub.Module(model, trainable=True, name="{}_module".format("mymod"))

hub_layer = hub.KerasLayer(elmo, 
#                           output_shape=[3,20], 
#                           input_shape=(1,),
                           dtype=tf.string, 
                           trainable=True)

hub_layer(train_examples[:3])

Производит

<tf.Tensor 'keras_layer_14/mymod_module_14_apply_default/truediv:0' shape=(3, 1024) dtype=float32>

Это кажется нормальным. Но:

model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

# First, I have to build, because I no longer have eager executon.
model.build(input_shape=(None,1024))

model.summary()

Тогда это дает:

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-54-8786753617e4> in <module>()
      4 model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
      5 
----> 6 model.build(input_shape=(None,1024))
      7 
      8 model.summary()

18 frames

/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in internal_convert_to_tensor_or_indexed_slices(value, dtype, name, as_ref)
   1381       raise ValueError(
   1382           "Tensor conversion requested dtype %s for Tensor with dtype %s: %r" %
-> 1383           (dtypes.as_dtype(dtype).name, value.dtype.name, str(value)))
   1384     return value
   1385   else:

ValueError: Tensor conversion requested dtype string for Tensor with dtype float32: 'Tensor("Placeholder_12:0", shape=(None, 1024), dtype=float32)'

Что еще изменилось в измерениях графика и как мне это исправить?

1 Ответ

0 голосов
/ 14 мая 2019

Проблема в том, что Керас предполагает, что входное значение равно float32:

Запрошенное преобразование dtype string для Тензор с dtype float32

Вымогу сказать, что это входные данные из-за имени «Placeholder_12: 0».Тензоры-заполнители используются для подачи данных в модель.

Модель hub_layer ожидает ввода строки, поэтому все, что вам нужно сделать, это добавить слой Input, который указывает, что

model = tf.keras.Sequential()
#add an input layer
model.add(tf.keras.layers.Input(shape=tuple(),dtype=tf.string))
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.build(input_shape=(None,1024))

model.summary()

Результаты:

Model: "sequential_4"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
keras_layer (KerasLayer)     (None, 1024)              93600852  
_________________________________________________________________
dense (Dense)                (None, 16)                16400     
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 17        
=================================================================
Total params: 93,617,269
Trainable params: 16,417
Non-trainable params: 93,600,852
_________________________________________________________________

Благодаря вашим модификациям и вышеуказанным модификациям я смог тренироваться, используя ноутбук colab.

...