keras model.save () выдает RuntimeError: Невозможно загрузить sh кэшированную информацию файла - PullRequest
0 голосов
/ 31 января 2020

У меня проблемы с конфигурацией кластера блоков данных, и проблема в том, что я не могу понять, где и почему. Я пытался сохранить модель keras, и, похоже, она не работает

dataset = pd.DataFrame([item.split(',') for item in '''6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1'''.split('\n')])

X = dataset.iloc[:,0:8]
y = dataset.iloc[:,8]

model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=3, batch_size=10)

accuracy = model.evaluate(X, y, verbose=0)
print(accuracy)

Проблема заключается в сохранении модели, может кто-нибудь помочь мне понять, в чем заключается ошибка, которую я использую Python 3.7.3, DBRuntime 6.2 (включает Apache Spark 2.4.4, Scala 2.11)

model.save('/dbfs/FileStore/tables/temp/new_model.h5')

KeyError Traceback (последний вызов был последним) / databricks / python / lib / python3 .7 / site-packages / keras / engine / save.py в save_model (модель, путь к файлу, перезапись, include_optimizer) 540 с H5Dict (filepath, mode = 'w') как h5dict: -> 541 _serialize_model (модель , h5dict, include_optimizer) 542 elif hasattr (filepath, 'write') и вызываемый (filepath.write):

/ databricks / python / lib / python3 .7 / site-packages / keras / engine / save.py в _serialize_model (модель, h5dict, include_optimizer) 160 для имени, val в zip (weight_names, weight_values): -> 161 layer_group [name] = val 162, если include_optimizer и model.optimizer:

/ databricks / python / lib / python3 .7 / site-packages / keras / utils / io_utils.py в setite m (self, attr, val) 230 повысить KeyError ('Невозможно установить атрибут. '-> 231' Группа с именем "{}" существует. '. Format (attr)) 232, если is_np:

KeyError:' Невозможно установить атрибут. Группа с именем "b \ 'dens_1 / kernel: 0 \" "существует.'

Во время обработки вышеуказанного исключения произошло другое исключение:

RuntimeError Traceback (последний вызов был последним) в ----> 1 model.save ('/ dbfs / FileStore / tables / temp / new_model.h5')

/ databricks / python / lib / python3 .7 / site-packages / keras / engine / network.py в save (self, filepath, overwrite, include_optimizer) 1150
повысить NotImplementedError 1151 из ..models import save_model -> 1152 save_model (self, filepath, overwrite, include_optimizer) 1153 1154 @ save.allow_write_to_gcs

/ databricks / python / lib / python3 .7 / site-packages / keras / engine / save.py в save_wrapper (obj, filepath, overwrite, * args, ** kwargs) 447 os.remove (tmp_filepath ) 448 else: -> 449 save_function (obj, filepath, overwrite, * args, ** kwargs) 450 451 return save_wrapper

/ databricks / python / lib / python3 .7 / site-packages / keras / engine / save.py в save_model (модель, путь к файлу, перезапись, include_optimizer) 539 возвращает 540 с H 5Dict (filepath, mode = 'w') как h5dict: -> 541 _serialize_model (model, h5dict, include_optimizer) 542 elif hasattr (filepath, 'write') и вызываемый (filepath.write): 543 # записать как двоичный поток

/ databricks / python / lib / python3 .7 / site-packages / keras / utils / io_utils.py в exit (self, exc_type, exc_val, exc_tb) 368 369 def выход (self, exc_type, exc_val, exc_tb): -> 370 self.close () 371 372

/ databricks / python / lib / python3 .7 / site-packages / keras / utils / io_utils.py в close (self) 344 def close (self): 345 if isinstance (self.data, h5py.Group): -> 346 self.data.file.flu sh () 347 if self._is_file: 348 self.data.close ()

/ databricks / python / lib / python3 .7 / site-packages / h5py / _hl / files.py в гриппе sh (self) 450 "" "451 с фил. -> 452 h5f.flu sh (self.id) 453 454 @ with_phil

h5py / _objects.pyx в h5py._objects.with_phil.wrapper ()

h5py / _objects.pyx в h5py._objects.with_phil.wrapper ()

h5py / h5f.pyx в h5py.h5f. flu sh ()

RuntimeError: Невозможно передать flu sh кэшированную информацию файла (ошибка записи файла: время = пт 31 января 08:19:53 2020, имя файла = '/ dbfs / FileStore / tables / temp / new_model.h5 ', дескриптор файла = 9, errno = 95, сообщение об ошибке =' Операция не поддерживается ', buf = 0x6993c98, общий размер записи = 320, байты этой вспомогательной записи = 320, фактически записанные байты = 18446744073709551615, смещение = 800)

1 Ответ

0 голосов
/ 17 апреля 2020

Я наконец смог сохранить модель, сохранив ее только на драйвере и скопировав ее на s3 ...

import os
import shutil
classification_model.save('news_dedup_model.h5')
shutil.copyfile('/databricks/driver/news_dedup_model.h5', '/dbfs/FileStore/tables/temp/nemish/news_dedup_model.h5')

classification_model = load_model('/dbfs/FileStore/tables/temp/nemish/news_dedup_model.h5', custom_objects={'tf': tf})

Все еще не могу понять, почему бы не сохранить ее нормально

...