Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用MXNet后端时,Keras无法加载模型权重_Python_Tensorflow_Keras_Mxnet - Fatal编程技术网

Python 使用MXNet后端时,Keras无法加载模型权重

Python 使用MXNet后端时,Keras无法加载模型权重,python,tensorflow,keras,mxnet,Python,Tensorflow,Keras,Mxnet,我正在尝试填补半小时碳通量时间序列的空白。我想使用训练测试验证交叉验证来识别最节省的LSTM模型,方法是使用所有可用输入训练一个模型,然后修剪它,直到分数停止提高。对于每个模型,我使用k-fold CV分割90%的训练,10%的验证,然后在model.fit()中,将训练进一步分割为训练集和测试集。我使用提前停止来帮助最小化运行时间,并使用ModelCheckpoint来保存最佳权重(具有最低“val_损失”的历元)。然后,我想加载这些模型权重,并使用测试集上表现最好的权重,在模型外部为验证留出

我正在尝试填补半小时碳通量时间序列的空白。我想使用训练测试验证交叉验证来识别最节省的LSTM模型,方法是使用所有可用输入训练一个模型,然后修剪它,直到分数停止提高。对于每个模型,我使用k-fold CV分割90%的训练,10%的验证,然后在model.fit()中,将训练进一步分割为训练集和测试集。我使用提前停止来帮助最小化运行时间,并使用ModelCheckpoint来保存最佳权重(具有最低“val_损失”的历元)。然后,我想加载这些模型权重,并使用测试集上表现最好的权重,在模型外部为验证留出的10%数据上计算验证分数(MSE)

下面是一个代码训练LSTM的工作示例,其中包含9个因子和13个时间(每次观察前的6个小时)

这里是我的数据集的几行——实际的序列有1000个观察值

datetime,co2_flux,ch4_flux,ustar,wind_speed,AirTC_Avg,air_pressure,AirTC_Min,RH,PPFD_Avg,NR_Wm2_Avg,VWC,Temp,Sedge,Shrubby
7/11/2016 8:00,-0.337747167,0.011732699,0.404379747,3.887986435,15.07,101118.6513,15.03,92.7,414.2,225.1,0.5895,7.950660426,0.001292044,0.823794007
7/11/2016 8:30,-1.021087283,0.010256442,0.424094541,3.94983083,14.89,101144.0926,14.84,92.8,339.7,177.1,0.5895,8.24119905,0.001058732,0.826866339
7/11/2016 9:00,-0.146511388,0.008503355,0.456274817,4.687202214,14.71,101177.3176,14.63,93.4,354.4,183.7,0.5895,8.146344257,0.000474955,0.84272365
7/11/2016 9:30,0.144368521,0.009458078,0.462915317,4.810986576,14.27,101203.9191,14.2,93.3,370.2,188.4,0.5895,7.995179025,0.00147768,0.854715683
7/11/2016 10:00,1.471425801,0.014895985,0.47095652,5.098075355,13.7,101235.9171,13.62,94.3,462.9,233.9,0.5895,7.521166721,4.64E-05,0.871581919
7/11/2016 10:30,0.889911286,0.01564225,0.487227522,4.969666239,13.13,101277.0195,13.04,96,309.9,155.2,0.5895,7.923818563,8.14E-06,0.880709962
当我在后台运行Tensorflow时,一切都很顺利,我得到了一个。但是,如果我尝试使用MXNet后端运行它,它将无法加载保存模型权重,我将得到以下回溯:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-14c6597a2feb> in <module>()
    114     Model = CH4_Model
    115     Best = LSTM_Optimize(Path,y_var)
--> 116     Best.Run(Model)
    117     print()
    118     print("--- %s seconds ---" % (time.time() - start_time))

<ipython-input-1-14c6597a2feb> in Run(self, Inputs)
     96                     shuffle=True,callbacks=[ES,CH,HS],verbose=0)
     97             Y = Mod.predict(Xscale[test],batch_size = batch_size)
---> 98             Mod.load_weights('weights.hdf5')
     99             Y = Mod.predict(Xscale[test],batch_size = batch_size)
    100             MSE.append(metrics.mean_squared_error(self.y[test],Y))

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/engine/topology.py in load_weights(self, filepath, by_name)
   2718             self.load_weights_from_hdf5_group_by_name(f)
   2719         else:
-> 2720             self.load_weights_from_hdf5_group(f)
   2721 
   2722         if hasattr(f, 'close'):

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/engine/topology.py in load_weights_from_hdf5_group(self, f)
   2804                         weight_values[0] = w
   2805                 weight_value_tuples += zip(symbolic_weights, weight_values)
-> 2806             K.batch_set_value(weight_value_tuples)
   2807 
   2808     def load_weights_from_hdf5_group_by_name(self, f):

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/backend/mxnet_backend.py in batch_set_value(tuples)
   2205     """
   2206     for p, w in tuples:
-> 2207         set_value(p, w)
   2208 
   2209 

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/backend/mxnet_backend.py in set_value(x, value)
   2193     if isinstance(value, Number):
   2194         value = [value]
-> 2195     x.bind(mx.nd.array(value))
   2196 
   2197 

/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in array(source_array, ctx, dtype)
   1295                 raise TypeError('source_array must be array like object')
   1296     arr = empty(source_array.shape, ctx, dtype)
-> 1297     arr[:] = source_array
   1298     return arr
   1299 

/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in __setitem__(self, key, value)
    384                 _internal._set_value(float(value), out=self)
    385             elif isinstance(value, (np.ndarray, np.generic)):
--> 386                 self._sync_copyfrom(value)
    387             else:
    388                 raise TypeError(

/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in _sync_copyfrom(self, source_array)
    556             print(self.shape)
    557             raise ValueError('Shape inconsistent: expected %s vs got %s'%(
--> 558                 str(self.shape), str(source_array.shape)))
    559         check_call(_LIB.MXNDArraySyncCopyFromCPU(
    560             self.handle,

ValueError: Shape inconsistent: expected () vs got (1,)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
114型=CH4_型
115最佳=LSTM_优化(路径,y_变量)
-->116最佳跑步(模型)
117印刷品()
118打印(“--%s秒--”%(time.time()-start_time))
运行中(自身、输入)
96 shuffle=True,回调=[ES,CH,HS],verbose=0)
97 Y=模型预测(Xscale[测试],批次大小=批次大小)
--->98模块负载重量('weights.hdf5')
99 Y=模型预测(Xscale[测试],批量大小=批量大小)
100毫秒附加(度量均方误差(self.y[test],y))
/加载权重中的usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/Keras/engine/topology.py(self,filepath,按名称)
2718.按组名称(f)从组hdf5中加载权重
2719其他:
->2720自加载来自hdf5组(f)的重量
2721
2722如果hasattr(f,“关闭”):
/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/Keras/engine/topology.py来自hdf5组(self,f)的负载权重
2804权重值[0]=w
2805权重值元组+=zip(符号权重、权重值)
->2806 K.批次设置值(重量值元组)
2807
2808 def按组名(自身,f)从组中加载权重:
/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/Keras/backend/mxnet\u backend.py in batch\u set\u值(元组)
2205     """
2206对于元组中的p,w:
->2207设定值(p,w)
2208
2209
/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/Keras/backend/mxnet\u backend.py in set\u值(x,值)
2193如果存在(值、编号):
2194值=[值]
->2195 x.bind(mx.nd.数组(值))
2196
2197
/数组中的usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py(源数组,ctx,dtype)
1295 raise TypeError('source_数组必须是类似数组的对象')
1296 arr=empty(source_array.shape,ctx,dtype)
->1297 arr[:]=源_数组
1298返回arr
1299
/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in_uuuusetitem_uuu(self、key、value)
384内部设置值(浮动(值),输出=自身)
385 elif isinstance(值,(np.ndarray,np.generic)):
-->386自同步复制源(值)
387其他:
388 raise TYPE错误(
/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in_sync_copyfrom(自同步、源阵列)
556打印(自成型)
557 raise VALUERROR('形状不一致:预期为%s,实际为%s'%(
-->558 str(self.shape),str(source_array.shape)))
559检查调用(_LIB.MXNDArraySyncCopyFromCPU(
560自我处理,
ValueError:形状不一致:应为()vs Get(1,)
为什么我要使用MXNet?它似乎比tensorflow快,而且我必须对许多具有不同输入、不同节点和超参数的模型执行训练测试验证。通过使用多处理来训练多个不同的模型,我已经能够显著提高具有MXNet后端的keras模型的速度然而,使用tensroflow后端,我在尝试进行多处理时遇到线程锁定错误

在上下文中,我正在p2.xlarge实例上使用深度学习AMI Ubuntu Linux-2.3_Sep2017(AMI-d6ee1dae)环境


如果您有任何想法,我们将不胜感激。

MXNet后端LSTM层使用MXNet,需要静态声明桶大小(长度),但Keras和TF支持动态长度。因此,您会发现加载模型权重和形状不匹配的问题

目前正在使用MXNet后端添加Keras2支持,在Keras2中应该注意这个问题。

MXNet后端LSTM层使用MXNet,需要静态声明桶大小(长度),但是,Keras和TF支持动态长度。因此,您会发现加载模型权重和形状不匹配的问题

目前正在使用MXNet后端添加Keras2支持,在Keras2中应该注意这个问题。

嘿,你明白了吗?没有使用MXNet,我放弃了它,转而使用tensorflow。我明白了如何使用tensorflow实现多处理以同时训练测试验证模型。嘿,你明白了吗?没有使用MXNet,我放弃了它,转而使用tensorflow。我明白了如何使用tensorflo实现多处理w训练
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-1-14c6597a2feb> in <module>()
    114     Model = CH4_Model
    115     Best = LSTM_Optimize(Path,y_var)
--> 116     Best.Run(Model)
    117     print()
    118     print("--- %s seconds ---" % (time.time() - start_time))

<ipython-input-1-14c6597a2feb> in Run(self, Inputs)
     96                     shuffle=True,callbacks=[ES,CH,HS],verbose=0)
     97             Y = Mod.predict(Xscale[test],batch_size = batch_size)
---> 98             Mod.load_weights('weights.hdf5')
     99             Y = Mod.predict(Xscale[test],batch_size = batch_size)
    100             MSE.append(metrics.mean_squared_error(self.y[test],Y))

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/engine/topology.py in load_weights(self, filepath, by_name)
   2718             self.load_weights_from_hdf5_group_by_name(f)
   2719         else:
-> 2720             self.load_weights_from_hdf5_group(f)
   2721 
   2722         if hasattr(f, 'close'):

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/engine/topology.py in load_weights_from_hdf5_group(self, f)
   2804                         weight_values[0] = w
   2805                 weight_value_tuples += zip(symbolic_weights, weight_values)
-> 2806             K.batch_set_value(weight_value_tuples)
   2807 
   2808     def load_weights_from_hdf5_group_by_name(self, f):

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/backend/mxnet_backend.py in batch_set_value(tuples)
   2205     """
   2206     for p, w in tuples:
-> 2207         set_value(p, w)
   2208 
   2209 

/usr/local/lib/python3.5/dist-packages/Keras-1.2.2-py3.5.egg/keras/backend/mxnet_backend.py in set_value(x, value)
   2193     if isinstance(value, Number):
   2194         value = [value]
-> 2195     x.bind(mx.nd.array(value))
   2196 
   2197 

/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in array(source_array, ctx, dtype)
   1295                 raise TypeError('source_array must be array like object')
   1296     arr = empty(source_array.shape, ctx, dtype)
-> 1297     arr[:] = source_array
   1298     return arr
   1299 

/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in __setitem__(self, key, value)
    384                 _internal._set_value(float(value), out=self)
    385             elif isinstance(value, (np.ndarray, np.generic)):
--> 386                 self._sync_copyfrom(value)
    387             else:
    388                 raise TypeError(

/usr/local/lib/python3.5/dist-packages/mxnet-0.11.0-py3.5.egg/mxnet/ndarray.py in _sync_copyfrom(self, source_array)
    556             print(self.shape)
    557             raise ValueError('Shape inconsistent: expected %s vs got %s'%(
--> 558                 str(self.shape), str(source_array.shape)))
    559         check_call(_LIB.MXNDArraySyncCopyFromCPU(
    560             self.handle,

ValueError: Shape inconsistent: expected () vs got (1,)