Tensorflow2.0 keras MobileNetV2 代码实现

本文介绍了如何使用Tensorflow2.0的Keras库复现MobileNetV2深度学习模型,详细讲解了Block和Depthwise Separable Block的实现,并讨论了迁移学习与自编程序的区别,最后分享了在网络重构过程中遇到的问题和解决方法。

网络介绍请参看:博文
keras搭建深度学习模型的若干方法:博文
直接上网络结构
在这里插入图片描述

迁移学习

依旧看看标准答案

import  tensorflow as tf
from    tensorflow import keras

base_model = keras.applications.MobileNetV2(weights='imagenet')
base_model.summary()

在这里插入图片描述

自编程序

Block

在这里插入图片描述
在这里插入图片描述

import  tensorflow as tf
from    tensorflow import keras
import tensorflow.keras.backend as K
from    tensorflow.keras import layers, models, Sequential, backend
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout, BatchNormalization, Activation, GlobalAveragePooling2D
from tensorflow.keras.layers import Concatenate, Lambda, Input, ZeroPadding2D, AveragePooling2D, DepthwiseConv2D, Reshape


def relu6(x):
    return K.relu(x, max_value=6)

# 保证特征层数为8的倍数
def make_divisible(v, divisor, min_value=None):
    if min_value is None:
        min_value = divisor
    new_v = max(min_value, int(v+divisor/2)//divisor*divisor) #//向下取整,除
    if new_v<0.9*v:
        new_v +=divisor
    return new_v

def conv_block (x, nb_filter, kernel=(1,1), stride=(1,1), name=None):

    x = Conv2D(nb_filter, kernel, strides=stride, padding='same', use_bias=False, name=name+'_conv1')(x)
    x = BatchNormalization(axis=3, name=name+'_bn1')(x)
    x = Activation(relu6, name=name+'_relu')(x)

    return x


def depthwise_res_block(x, nb_filter, kernel, stride, t, alpha, resdiual=False, name=None):

    input_tensor=x
    exp_channels= x.shape[-1]*t  #扩展维度
    alpha_channels = int(nb_filter*alpha)     #压缩维度

    x = conv_block(x, exp_channels, (1,1), (1,1), name=name+'_expansion')

    x = DepthwiseConv2D(kernel, padding='same', strides=stride, depth_multiplier=1, use_bias=False, name=name+'_dpconv')(x)
    x = BatchNormalization(axis=3, name=name+'_bn1')(x)
    x = Activation(relu6, name=name+'_relu1')(x)

    x = Conv2D(alpha_channels, (1,1), padding='same', use_bias=False, strides=(1,1), name=name+'_conv_2')(x)
    x = BatchNormalization(axis=3, name=name+'_bn2')(x)

    if resdiual:
        x = layers.add([x, input_tensor])

    return x

def inverted_residual_layers(x,nb_filter, stride, t, alpha, n, name=None):

    x = depthwise_res_block(x, nb_filter, (3,3), stride, t, alpha,False, name=name+'_dep1')

    for i in range(1, n):
        x = depthwise_res_block(x, nb_filter, (3,3), (1,1), t, alpha, True, name=name+'_dep'+str(i+1) )
    
    return x

此处注意网络中的所有卷积网络use_bias=False,即神经元无偏差设置

Depthwise Separable block

对比原文和Keras

<think>我们正在解决VSCode中出现的导入错误问题:'Import "tensorflow.keras.applications" could not be resolved' 用户已经安装了TensorFlow,但VSCode仍然报错,这通常是环境配置或IDE设置问题。 可能的解决方案: 1. 确认当前VSCode使用的Python解释器环境是安装了TensorFlow的那个环境。 2. 检查环境中TensorFlow是否正确安装,以及版本是否支持`tensorflow.keras.applications`。 3. 重启VSCode或重新加载窗口。 4. 确保在VSCode中选择了正确的Python解释器。 5. 尝试更新VSCode的Python扩展或重新安装。 6. 清除缓存并重新启动语言服务器。 步骤详解: 步骤1:检查Python环境 在VSCode中,打开终端(Terminal),运行以下命令确认TensorFlow已安装: ```bash pip list | grep tensorflow ``` 或者 ```bash pip show tensorflow ``` 如果未找到,请安装TensorFlow:`pip install tensorflow` 步骤2:选择正确的解释器 - 在VSCode底部状态栏,点击当前Python解释器版本(如Python 3.x.x)。 - 在弹出的列表中选择正确的环境(即安装了TensorFlow的环境)。 步骤3:重新加载窗口 选择解释器后,VSCode可能需要重新加载窗口。可以通过命令面板(Ctrl+Shift+P)执行“Developer: Reload Window”。 步骤4:检查Python扩展 确保已安装Microsoft的Python扩展,并且是最新版本。可以在扩展市场搜索“Python”进行更新。 步骤5:清除缓存并重启语言服务器 有时候,VSCode的Python语言服务器可能会缓存旧的环境信息。可以尝试: - 在命令面板(Ctrl+Shift+P)运行“Python: Clear Cache and Reload Window”。 步骤6:检查导入语句 确保导入语句正确。在TensorFlow 2.x中,推荐使用: `from tensorflow.keras.applications import EfficientNetB0` 而不是 `from keras.applications import EfficientNetB0` (如果单独安装了Keras,可能会有冲突) 步骤7:检查环境变量 如果使用了虚拟环境(如conda或venv),请确保在终端中激活了该环境,并且VSCode在该环境的上下文中运行。 如果以上步骤都不行,可能需要考虑重装TensorFlow或者检查路径设置。 生成相关问题: 1. 如何在VSCode中切换Python解释器? 2. 如何创建并激活Python虚拟环境? 3. TensorFlow安装后导入失败的常见原因有哪些? </think>### 解决 VSCode 中 "Import 'tensorflow.keras.applications' could not be resolved" 错误的方法 这个错误通常是由于 Python 环境配置或 TensorFlow 安装问题导致的。以下是完整的解决步骤: #### 1. **验证 TensorFlow 安装** 在终端执行以下命令: ```bash python -c "import tensorflow as tf; print(tf.__version__)" ``` 如果报错或版本低于 2.0,请重新安装: ```bash pip install --upgrade tensorflow ``` #### 2. **检查 VSCode 的 Python 解释器** - 按 `Ctrl+Shift+P` 打开命令面板 - 搜索并选择 `Python: Select Interpreter` - **确保选择的解释器与安装 TensorFlow 的环境一致**(如虚拟环境) - 右下角状态栏应显示正确解释器路径 #### 3. **重建 VSCode 语言服务器索引** 在命令面板执行: ``` Python: Restart Language Server ``` 或清除缓存: ``` Python: Clear Cache and Reload Window ``` #### 4. **检查导入语法** 确认代码中使用的是 TensorFlow 2.x 的标准导入方式: ```python # 正确写法 from tensorflow.keras.applications import EfficientNetB0 # 错误写法(单独keras包) from keras.applications import ... # 会导致冲突 ``` #### 5. **检查虚拟环境(如使用)** - 激活虚拟环境:`source venv/bin/activate` (Linux/Mac) 或 `venv\Scripts\activate` (Windows) - 在虚拟环境中重新安装 TensorFlow - 在 VSCode 中手动选择该虚拟环境的解释器 #### 6. **更新开发工具** ```bash pip install --upgrade pylint tensorflow code --install-extension ms-python.python ``` #### 7. **验证环境的模块路径** 在 Python 终端运行: ```python import tensorflow.keras print(tensorflow.keras.__file__) # 应显示正确路径 ``` > **重要提示**:90% 的此类错误是由于 VSCode 使用了未安装 TensorFlow 的解释器导致的[^1]。确保环境一致性是解决问题的关键。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值