TensorFlow 2.0 и NetCDF4 RuntimeError: ошибка HDF - возможная проблема с вводом-выводом - PullRequest
1 голос
/ 30 мая 2020

При попытке записать массив NumPy с плавающей запятой в набор данных NetCDF4, я получаю RuntimeError: NetCDF: HDF error. Я считаю, что где-то TensorFlow2.0 испортил NetCDF4, но мне нужно импортировать оба в одном классе / функции. Непонятно, почему последовательность импорта библиотек влияет на ввод-вывод файла NetCDF4.
Вот пример сценария:

##The sequence of import which doesn't work
import numpy as np  
import tensorflow as tf       ### <<< if imported here, saving .nc doesn't work
import netCDF4 as nc
#import tensorflow as tf      ### <<< if imported here, saving .nc works properly

print("I am TensorFlow ", tf.__version__, " but I have no job here")
print("I would let NetCDF4 ", nc.__version__," do it's job, for now")

Nx = 160                            # just another number
outputfile = "outputfile.nc"        # just another filename
ArrayField = np.ones((Nx,Nx,1))     # sample array to write

print("Writing field data of shape", ArrayField.shape)
ncfile = nc.Dataset("outputfile.nc",'w',format='NETCDF4_CLASSIC')

ncfile.createDimension('X',ArrayField.shape[0])             #line is probably okay
newx = ncfile.createVariable('X','d',('X'))                 #line is probably okay
newx[:] = np.linspace(0.00,1.00,ArrayField.shape[0])        #line is probably okay
velx = ncfile.createVariable('Component_X','d',('X','X'))   #line is probably okay
velx[:] = ArrayField[:,:,0].T                               #line is probably okay

print("Something written to: ", outputfile)
ncfile.close()  ###### <<<<<<< Gives error here 
print("Data successfully written to: ", outputfile)

Вывод / Ошибка:

I am TensorFlow  2.0.0  but I have no job here
I would let NetCDF4  1.5.3  do it's job, for now
Writing field data of shape (160, 160, 1)
Something written to:  outputfile.nc
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-1-1cfdf4070b97> in <module>
     22 
     23 print("Something written to: ", outputfile)
---> 24 ncfile.close()  ###### <<<<<<< Gives error here
     25 print("Data successfully written to: ", outputfile)
netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset.close()
netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset._close()
netCDF4/_netCDF4.pyx in netCDF4._netCDF4._ensure_nc_success()
RuntimeError: NetCDF: HDF error

Ожидаемый результат:

I am TensorFlow  2.0.0  but I have no job here
I would let NetCDF4  1.5.3  do it's job, for now
Writing field data of shape (160, 160, 1)
Something written to:  outputfile.nc
Data successfully written to:  outputfile.nc

Хотя я могу импортировать TF2.0 после импорта NetCDF4, чтобы этот конкретный образец работал, он на самом деле не отвечает на вопрос о получении RuntimeError: NetCDF: HDF error и устранении проблемы с его использованием в сложных случаях. Кроме того, я хотел бы вернуть дополнительную информацию об отладке.

  1. Протестировано с tensorflow==2.1.0 и 2.2.0, дает ту же ошибку.
  2. Размер диска созданного мусора .n c файл ~204K, что должно быть около ~209K для этого образца массива.
  3. Проблема сохраняется на другом компьютере или в чистой среде при установке только tensorflow==2.0.0, numpy==1.17.3, netCDF4==1.5.3.
  4. На всякий случай вот список pip freeze моей чистой среды: https://gist.github.com/aakash30jan/9ae0cf3dde8a63d28df5275873cb0f10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...