Tensorflow错误AttributeError: module ‘tensorflow._api.v2.distribute‘ has no attribute ‘TPUStrategy‘

项目场景:

最近在学习Mooc上的Tensorflow入门实操课程,学到第4.4课优化模型参数,在自己环境中复现代码时,出现了一个错误,困扰我好几天,特此来记录一下


我的环境:

python3.6
tensorflow-gpu 2.2.0

问题描述:

该错误出现在人马图片识别模型的优化模型参数中,需要用到kerastuner包,目标是用tuners来实现对模型中参数的自动优化,但是在我将代码运行在自己环境中时,出现以下错误
错误截图
我的代码:

from tensorflow.python import InteractiveSession, ConfigProto, os
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf

from kerastuner.tuners import Hyperband
from kerastuner.engine.hyperparameters import HyperParameters

from tensorflow.python.keras.optimizer_v2.rmsprop import RMSprop

config = ConfigProto()
# 配置GPU内存分配方式,按需增长,很关键
config.gpu_options.allow_growth = True
# 在创建session的时候把config作为参数传进去
session = InteractiveSession(config=config)



#创建两个数据生成器,指定scaling范围0-1
train_datagen = ImageDataGenerator(rescale=1/255)
validation_datagen = ImageDataGenerator(rescale=1/255)

#指向训练数据文件夹
train_generator = train_datagen.flow_from_directory(
    'D://Tensorflow-data/horse-or-human',
    target_size=(300,300),  #指定输出尺寸
    batch_size=32,
    class_mode='binary')  # 指定二分类器

#指向训练数据文件夹
validation_generator = train_datagen.flow_from_directory(
    'D://Tensorflow-data/validation-horse-or-human',
    target_size=(300,300),  #指定输出尺寸
    batch_size=32,
    class_mode='binary')  # 指定二分类器

# 通过kerastuner实现自动调整值
hp=HyperParameters()
# 将创造模型的代码作为函数
def buiil_model(hp):
    model = tf.keras.models.Sequential([
        # hp方法: ‘’内名称为自动优化后值保存的名称,values为测试的范围
        tf.keras.layers.Conv2D(hp.Choice('num_filters_layer0',values=[16,64],default=16), (3,3), activation='relu',input_shape=(300,300,3)),
        tf.keras.layers.MaxPool2D(2,2),
        tf.keras.layers.Conv2D(16, (3,3), activation='relu'),
        tf.keras.layers.MaxPool2D(2,2),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(512, activation='relu'),
        #输出一个神经元
        tf.keras.layers.Dense(1, activation='sigmoid')
    ])
    model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=0.001), metrics=['acc'])
    return model

tuner=Hyperband(
    # 函数名字,用哪个函数生成模型
    buiil_model,
    # 目标,测试集的acc为目标,貌似是精确
    objective='val_acc',
    max_epochs=15,
    directory='D://Tensorflow-data/horse_human_params',
    hyperparameters=hp,
    project_name='D://Tensorflow-data/my_horse_human_project'
)

tuner.search(
    train_generator,
    epochs=5,
    validation_data=validation_generator,
)

具体错误可以定位到该处:

tuner.search(
    train_generator,
    epochs=5,
    validation_data=validation_generator,
)

错误信息:AttributeError: module ‘tensorflow._api.v2.distribute’ has no attribute ‘TPUStrategy’

就是说tensorflow._api.v2.distribute没有这个属性


原因分析:

在网上大量搜索后发现没有几篇文章讲的是这个错误,具体的解决方法只有几个模糊的相关问题的,于是我自己去官网上搜索了这个方法,发现该方法只出现在TensorFlow 2.4.1的目录中,而我的环境是TensorFlow 2.2.0的,所以没有该方法也就用不了tuners来自动调参了。
在这里插入图片描述


解决方案:

解决方法就是把TensorFlow升级到TensorFlow 2.4.1。我自己电脑cuda版本不够,不能适配2.4.1版本,而且主要是学习为主,就没有升级,只能先跳过这一节了。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值