如何使用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,但效果也不佳。
谢谢!