Преобразование кода из keras в tf.keras вызывает проблемы - PullRequest
0 голосов
/ 10 февраля 2019

Я изучаю машинный перевод в Керасе, используя код из этой статьи .Код статьи отлично работает на GPU и CPU как есть.

Теперь я хочу воспользоваться преимуществами TPU Google Colab.Код не TPU-ify как есть, мне нужно двигаться в направлении TF.

Следуя инструкции Fashion MNIST для TPU , я использую слой Keras в Tensorflow, а не наоборот.Прежде чем перейти к части TPU, я делаю это преобразование, чтобы увидеть, работает ли оно на GPU.Это в основном означает изменение этой функции с:

from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import Embedding
from keras.layers import RepeatVector
from keras.layers import TimeDistributed
# define NMT model
def define_model(src_vocab, tar_vocab, src_timesteps, tar_timesteps, n_units):
    model = Sequential()
    model.add(Embedding(src_vocab, n_units, input_length=src_timesteps, mask_zero=True))
    model.add(LSTM(n_units))
    model.add(RepeatVector(tar_timesteps))
    model.add(LSTM(n_units, return_sequences=True))
    model.add(TimeDistributed(Dense(tar_vocab, activation='softmax')))
    return model

на:

import tensorflow as tf
# define NMT model
def define_model(src_vocab, tar_vocab, src_timesteps, tar_timesteps, n_units):
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Embedding(src_vocab, n_units, input_length=src_timesteps, mask_zero=True))
    model.add(tf.keras.layers.LSTM(n_units))
    model.add(tf.keras.layers.RepeatVector(tar_timesteps))
    model.add(tf.keras.layers.LSTM(n_units, return_sequences=True))
    model.add(tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(tar_vocab, activation='softmax')))
    return model

Затем я выполняю

model = define_model(swh_vocab_size, eng_vocab_size, swh_length, eng_length, 256)
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(trainX, trainY, epochs=1, batch_size=64, validation_data=(testX, testY), callbacks=[checkpoint], verbose=2)

Однако это приводит к жалобе при запускеПодгонка:

lib\site-packages\tensorflow\python\ops\gradients_impl.py:112: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "

Затем во время подгонки внутри GPU происходит сбой при нагрузке BLAS следующим образом:

InternalError: Blas GEMM launch failed : a.shape=(64, 256), b.shape=(256, 256), m=64, n=256, k=256
     [[{{node lstm/while/MatMul}} = MatMul[T=DT_FLOAT, _class=["loc:@training/Adam/gradients/lstm/while/strided_slice_grad/StridedSliceGrad"], transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](lstm/while/TensorArrayReadV3, lstm/while/strided_slice)]]
     [[{{node loss/time_distributed_loss/broadcast_weights/assert_broadcastable/AssertGuard/Assert/Switch/_175}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_2728_...ert/Switch", tensor_type=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

Это до преобразования в модель TPU.Я просто пытаюсь убедиться, что все еще работает на CPU и GPU, прежде чем перейти к окончательному преобразованию TPU.Они неЕсть мысли о том, почему я не могу зайти так далеко?

1 Ответ

0 голосов
/ 11 февраля 2019

Я думаю, что это может быть связано с тщательной установкой Anaconda Python в Windows.Вот, я думаю, правильная последовательность (при условии, что, как и в моем случае, у вас уже установлены CUDA 9.0 и cuDNN):

Установите версию Visual Studio, соответствующую той, которая использовалась для создания тензорного потока, для этоговопрос. Добавить путь

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC 

в PATH.

И this : запустить vcvarsall в скрипте перед запуском Python.Затем:

  1. Запустите окно CMD с помощью запуска от имени администратора.Это очень важно.
  2. conda create - имя myenv
  3. conda активировать myenv
  4. conda install tenorflow-gpu
  5. conda install mingw
  6. conda install libpython
  7. conda install mkl-service

Я отмечу это исправление позже, после еще нескольких испытаний.Шаги 3 и 4 взяты из этого вопроса и концепции начинать с нуля и строго использовать установку conda вместо установки pip из этого вопроса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...