从零构建CNN模型:TensorFlow 1.x实战西储大学轴承故障诊断
轴承故障诊断是工业设备健康管理的重要环节。传统的振动信号分析方法依赖人工特征提取,而深度学习技术能够自动学习信号特征,显著提升诊断效率。本文将带您从零开始,使用TensorFlow 1.x和Keras构建一个完整的1D-CNN模型,处理西储大学的.mat格式振动数据。
1. 环境配置与数据准备
1.1 开发环境搭建
对于TensorFlow 1.x项目,环境配置需要特别注意版本兼容性。推荐使用conda创建隔离的Python环境:
bash复制conda create -n tf1_env python=3.7
conda activate tf1_env
pip install tensorflow==1.15.0 keras==2.3.1 h5py==2.10.0 scipy==1.2.1
关键库版本说明:
| 库名称 | 推荐版本 | 作用说明 |
|---|---|---|
| TensorFlow | 1.15.0 | 深度学习框架基础 |
| Keras | 2.3.1 | 高层API接口 |
| h5py | 2.10.0 | 处理.mat格式数据 |
| scipy | 1.2.1 | 科学计算与.mat文件读取 |
注意:TensorFlow 1.x与2.x在API设计上有显著差异,本文所有代码均基于1.x版本实现。
1.2 数据加载与探索
西储大学轴承数据集包含多种故障状态下的振动信号,存储为.mat格式。我们先了解数据结构:
python复制from scipy.io import loadmat
import numpy as np
def load_mat_file(filepath):
"""加载单个.mat文件并提取振动信号"""
data = loadmat(filepath)
for key in data.keys():
if 'DE' in key: # DE表示驱动端振动数据
return data[key].ravel()
raise ValueError("未找到振动信号数据")
典型的数据结构特征:
- 采样频率:12kHz(每秒12000个数据点)
- 信号长度:通常包含多个旋转周期的振动数据
- 故障类型:包括内圈故障、外圈故障、滚动体故障等
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据预处理流程
2.1 信号切片与增强
原始振动信号通常很长,需要切分为适合CNN处理的片段:
python复制def slice_signal(signal, window_size=864, step=28):
"""将长信号切分为固定长度的片段"""
slices = []
for start in range(0, len(signal)-window_size, step):
slices.append(signal[start:start+window_size])
return np.array(slices)
数据增强技巧:
- 随机切片:从不
