未在分配策略范围中创建变量

时间:2020-03-20 10:07:40

标签: tensorflow2.0 tpu tf-hub

如何使用tf.hub特征提取器编译TPU训练模型?

import tensorflow_hub as hub


with strategy.scope():
    inp=Input(shape=DIMS)
    base_feat = hub.KerasLayer("https://tfhub.dev/tensorflow/efficientnet/lite0/feature-vector/1",input_shape=(512,512,3))(inp)
    out=Dense(4,activation='sigmoid')(base_feat)
    model=Model(inp,out)
    model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=['acc'])

错误:

    ValueError                                Traceback (most recent call last)
<ipython-input-246-f0b8d9e32b32> in <module>()
      9     out=Dense(4,activation='sigmoid')(base_feat)
     10     model=Model(inp,out)
---> 11     model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=['acc'])

1 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py in compile(self, optimizer, loss, metrics, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, distribute, **kwargs)
    469                 'with strategy.scope():\n'
    470                 '  model=_create_model()\n'
--> 471                 '  model.compile(...)'% (v, strategy))
    472 
    473   @trackable.no_automatic_dependency_tracking

ValueError: Variable (<tf.Variable 'efficientnet-lite0/stem/conv2d/kernel:0' shape=(3, 3, 3, 32) dtype=float32>) was not created in the distribution strategy scope of (<tensorflow.python.distribute.tpu_strategy.TPUStrategy object at 0x7fb6a9aa9358>). It is most likely due to not all layers or the model or optimizer being created outside the distribution strategy scope. Try to make sure your code looks similar to the following.
with strategy.scope():
  model=_create_model()
  model.compile(...)

我尝试使用base_feat的输入:

导入tensorflow_hub作为中心

with strategy.scope():
    base_feat = hub.KerasLayer("https://tfhub.dev/tensorflow/efficientnet/lite0/feature-vector/1",input_shape=(512,512,3))
    out=Dense(4,activation='sigmoid')(base_feat)
    model=Model(base_feat.input,out)
    #model.build((512,512,3))
    model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=['acc'])

但出现以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-254-8984ca67cd6f> in <module>()
      5 with strategy.scope():
      6     base_feat = hub.KerasLayer("https://tfhub.dev/tensorflow/efficientnet/lite0/feature-vector/1",input_shape=(512,512,3))
----> 7     out=Dense(4,activation='sigmoid')(base_feat)
      8     model=Model(base_feat.input,out)
      9     model.build((512,512,3))

2 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
    161         spec.min_ndim is not None or
    162         spec.max_ndim is not None):
--> 163       if x.shape.ndims is None:
    164         raise ValueError('Input ' + str(input_index) + ' of layer ' +
    165                          layer_name + ' is incompatible with the layer: '

AttributeError: 'KerasLayer' object has no attribute 'shape'

我也尝试顺序使用keras,但效果也不佳。

谢谢!

0 个答案:

没有答案