Python 将Keras转换为Tensorflow——修剪&x2B;可能性

Python 将Keras转换为Tensorflow——修剪&x2B;可能性,python,tensorflow,keras,keras-layer,tf.keras,Python,Tensorflow,Keras,Keras Layer,Tf.keras,我有一个混合Tensorflow概率(需要TF 2.00)和Keras修剪的代码,修剪第一个密集层的权重,并为TF概率提供输入,两个代码(Keras+TF)在同一个模型中。守则: from tensorflow_model_optimization.sparsity import keras as sparsity from tensorflow.python import keras import numpy as np tf.disable_v2_behavior() epochs = 5

我有一个混合Tensorflow概率(需要TF 2.00)和Keras修剪的代码,修剪第一个密集层的权重,并为TF概率提供输入,两个代码(Keras+TF)在同一个模型中。守则:

from tensorflow_model_optimization.sparsity import keras as sparsity
from tensorflow.python import keras
import numpy as np
tf.disable_v2_behavior()

epochs = 50
num_train_samples = x1.shape[0]
end_step = 500
print('End step: ' + str(end_step))

tfd = tfp.distributions

input_shape=x1.shape

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    pruned_model = tf.keras.Sequential([
        sparsity.prune_low_magnitude(
            tf.keras.layers.Dense(1, activation='relu'),**pruning_params),
      tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t, scale=1))
    ])

    negloglik = lambda x, rv_x: -rv_x.log_prob(x)


    pruned_model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.0001), loss=negloglik)

    callbacks = [
        pruning_callbacks.UpdatePruningStep(),
        pruning_callbacks.PruningSummaries(log_dir="D:\Python\logs2", profile_batch=0)]

    # ERROR HERE IN .fit()

    pruned_model.fit(x1,y, epochs=50, verbose=True, batch_size=16,callbacks=callbacks)

    yhat2 = pruned_model(np.array(dataframe.iloc[:,1]).T.astype(np.float32).reshape(-1,1)[650:800])
    mean02 = tf.convert_to_tensor(yhat2)
    mean2 = sess.run(mean02)    
    stddev2 = yhat2.stddev()
    mean_plus_2_std2 = sess.run(mean2 - 3. * stddev2)
    mean_minus_2_std2 = sess.run(mean2 + 3. * stddev2)
错误的详细信息:

  File "<ipython-input-129-a0ad4118e99e>", line 1, in <module>
    pruned_model.fit(x1,y, epochs=50, verbose=True, batch_size=16,callbacks=callbacks)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 806, in fit
    shuffle=shuffle)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 2503, in _standardize_user_data
    self._set_inputs(cast_inputs)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\training\tracking\base.py", line 456, in _method_wrapper
    result = method(self, *args, **kwargs)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 2773, in _set_inputs
    outputs = self.call(inputs, training=training)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\sequential.py", line 256, in call
    outputs = layer(inputs, **kwargs)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 594, in __call__
    self._maybe_build(inputs)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 1713, in _maybe_build
    self.build(input_shapes)

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow_model_optimization\python\core\sparsity\keras\pruning_wrapper.py", line 175, in build
    self.prunable_weights = self.layer.get_prunable_weights()

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow_model_optimization\python\core\sparsity\keras\prune_registry.py", line 169, in get_prunable_weights
    return [getattr(layer, weight) for weight in cls._weight_names(layer)]

  File "C:\Users\Rubens\Anaconda3\lib\site-packages\tensorflow_model_optimization\python\core\sparsity\keras\prune_registry.py", line 169, in <listcomp>
    return [getattr(layer, weight) for weight in cls._weight_names(layer)]

AttributeError: 'Dense' object has no attribute 'kernel'
文件“”,第1行,在
修剪的模型.fit(x1,y,epochs=50,verbose=True,batch\u size=16,callbacks=callbacks)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第806行
洗牌
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第2503行,在用户数据中
自设置输入(转换输入)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\training\tracking\base.py”,第456行,在方法包装中
结果=方法(自身、*args、**kwargs)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\keras\engine\training.py”,第2773行,在集合输入中
输出=自我呼叫(输入,培训=培训)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\keras\engine\sequential.py”,第256行,在调用中
输出=图层(输入,**kwargs)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\keras\engine\base\u layer.py”,第594行,在调用中__
自我构建(输入)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\python\keras\engine\base\u layer.py”,第1713行,在构建中
自我构建(输入形状)
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\u model\u optimization\python\core\sparsity\keras\pruning\u wrapper.py”,第175行,内部版本
self.prunable\u weights=self.layer.get\u prunable\u weights()
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\u model\u optimization\python\core\sparsity\keras\prune\u registry.py”,第169行,在get\u prunable\u weights中
返回[getattr(层,权重)以获取cls中的权重。\u权重\u名称(层)]
文件“C:\Users\Rubens\Anaconda3\lib\site packages\tensorflow\u model\u optimization\python\core\sparsity\keras\prune\u registry.py”,第169行,在
返回[getattr(层,权重)以获取cls中的权重。\u权重\u名称(层)]
AttributeError:“稠密”对象没有属性“内核”
我的问题是:如何将Keras层(删减低量级)转换为Tensorflow,或者如何将Tensorflow概率层(tfp.layers.DistributionLambda)转换为Keras并正确训练模型


笔记本使用Keras==2.2.4和Tensorflow==2.0.0a0,我找到了解决方案。我安装了:

! pip install --upgrade tfp-nightly
! pip install tf_nightly
! pip install tf_estimator_nightly