问题描述
def get_resnet(
inputs,init_nf=16,init_ks=5,init_drop=.2,res_drop=.5
repeats=None,num_groups=3,augment=[],exp_repeat=True,):
x = inputs
if augment: x = Augmentation(augment)(x)
x= ConvBNDrop(init_nf,init_ks,drop=init_drop)(x)
nf = 2*init_nf
if not repeats: repeats = [2**i for i in range(num_groups)] if exp_repeat else list(range(1,num_groups+1))
for i,r in enumerate(repeats):
x = ConvBNDrop(nf*2**i,3,stride=s,drop=res_drop)(x)
x = ResBlock(nf*2**i,r,drop=res_drop)(x)
x = kl.GlobalMaxPooling1d(name='embedding')(x)
x = kl.Dropout(.5)(x)
x = kl.Dense(1,'sigmoid')(x)
return tf.keras.Model(inputs=inputs,outputs=x,name='resnet')
HParam变量是:
HP_INIT_NF = hp.HParams('num_filters',hp.discrete([16,32])
HP_INIT_DROP = hp.HParams('init_drop',hp.RealInterval(0.1,0.2))
HParaMS = [HP_INIT_NF,HP_INIT_DROP]
指标变量是:
METRICS = [hp.Metric('AUC',display_name='AUC'),hp.Metric('Precision',display_name='Precision')]
def tuned_resnet(hparams,log_dir):
model = get_resnet(tk.keras.Input([None,13]),init_nf = HParaMS[HP_INIT_NF],init_drop = HParaMS[HP_INIT_DROP])
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=METRICS)
callbacks = [tf.keras.callbacks.Tensorboard(log_dir),hp.keRascallback(log_dir,hparams)]
model.fit(train_ds,epochs=10,valid_ds,callbacks=callbacks)
return metrics
session_num = 0
for num_filters in HP_INIT_NF.domain.values:
hparams = {HP_INIT_NF: num_filters}
run_name = "run-%d" % session_num
print('--- Starting trial: %s' % run_name)
print({h.name: hparams[h] for h in hparams})
tuned_resnet(hparams,'logs/hparam_tuning/' + run_name)
session_num += 1
运行这些代码块后,会话将引发:
TypeError: Dimension value must be integer or None or have an __index__ method,got HParam('num_filters',32])
此错误是HParam定义中的错误,还是具有自定义resnet期望的错误?关于如何解决该问题以及是否接受HParam的任何想法?
Python 3.7 Tensorflow 2.1 Tensorboard 2.1.0
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)