TensorFlow模型构建之tf.keras.Sequential()

Keras有两种类型的模型,tf.keras.Sequential 和 函数式模型(Model)

tf.keras 可以运行任何keras兼容的代码,但要注意版本是否匹配,保存模型默认采用checkpoint format方式,也可以传递save_format='h5’来使用HDF5。
最常见的模型是层的堆叠:tf.keras.Sequential,层的线性叠加。

Sequential模型

别名:tf.keras.models.Sequential

1 选择模型(选择 Sequential)
model = Sequential()
2 网络构建
model.add(Dense(500,input_shape=(784,))) # 输入层,28*28=784  
model.add(Activation('tanh')) # 激活函数是tanh  
model.add(Dropout(0.5)) # 采用50%的dropout
3 编译
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) # 优化函数,设定学习率(lr)等参数  
model.compile(loss='categorical_crossentropy', optimizer=sgd, class_mode='categorical') # 使用交叉熵作为loss函数
4 训练
model.fit(X_train,Y_train,batch_size=200,epochs=50,shuffle=True,verbose=0,validation_split=0.3)
model.evaluate(X_test, Y_test, batch_size=200, verbose=0)
5 输出
result = model.predict(X_test,batch_size=200,verbose=0)

tf.keras.models.Sequential 中的方法:

  • add(layer) 添加层
    在层堆栈的顶部添加层实例

  • compile 模型配置

compile(
    optimizer='rmsprop',  			# 字符串(优化器的名称)或优化器实例
    loss=None,						# 损失函数,如果模型有多个输出,您可以通过传递字典或损失列表来对每个输出
    								# 使用不同的损失,由模型最小化的损失值将是所有独立损失的总和。
    metrics=None,					# 在训练和测试期间,模型要评估的度量标准列表,通常将使用metrics=['accuracy']。
    								# 要为一个多输出模型的不同输出指定不同的度量,可以传递一个字典,例如metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}。
    								# 还可以传递矩阵列表(len = len(输出)),比如metrics=[[accuracy'], ['accuracy', 'mse'],或者metrics=['accuracy', ['accuracy', 'mse']]。
    loss_weights=None,				# 指定标量系数(Python浮点数)的可选列表或字典,以对不同模型输出的损失贡献进行加权。
    sample_weight_mode=None,		# 如果需要按时间步长进行样本加权(2D加权),请将其设置为“时间”。没有默认的采样权值(1D)。
    weighted_metrics=None,			# 在训练和测试期间,将通过sample_weight或class_weight评估和加权的度量列表。
    target_tensors=None,			# 默认情况下,Keras将为模型的目标创建占位符,这些占位符将在训练期间与目标数据一起提供。
    								# 相反,如果您想使用自己的目标张量(反过来,Keras在训练时不会期望这些目标的外部Numpy数据),可以通过target_tensors参数指定它们。
    distribute=None,				# 在TF 2.0中不支持
    **kwargs						# 任何额外的参数
)
  • evaluate 评价
evaluate(
    x=None,								# 输入值
    y=None,								# 目标值
    batch_size=None,					# 每次梯度更新的样本数
    verbose=1,
    sample_weight=None,					# 用于加权损失函数,在这种情况下,您应该确保在compile()中指定sample_weight_mode="temporal"。
    									# 当x是一个数据集时,不支持此参数,而是将示例权重作为x的第三个元素传递。
    steps=None,							# 样品批次数
    callbacks=None,						# 回调
    max_queue_size=10,					# 生成器队列的最大大小。如果未指定,max_queue_size将默认为10。
    workers=1,							# 使用基于进程的线程时要向上旋转的最大进程数,如果未指定,工人将默认为1。如果为0,将在主线程上执行生成器。
    use_multiprocessing=False  			# 请注意,由于此实现依赖于多进程,因此不应该将非picklable参数传递给生成器,因为它们不能轻松传递给子进程。
)

返回: metrics_names将为标量输出提供显示标签。

  • fit
fit(
    x=None,
    y=None,
    batch_size=None, 				# 每次梯度更新的样本数
    epochs=1,						# 训练模型的迭代数
    verbose=1,
    callbacks=None,
    validation_split=0.0,			# 将训练数据的一部分用作验证数据
    validation_data=None,			# 用于评估损失的数据和每个epoch结束时的任何模型度量。模型不会根据这些数据进行训练。validation_data将覆盖validation_split。
    shuffle=True,					# 在每个epoch之前对训练数据进行洗牌
    class_weight=None,			
    sample_weight=None,
    initial_epoch=0,				# 开始训练的时间(对于恢复之前的训练很有用)。
    steps_per_epoch=None,
    validation_steps=None,
    validation_freq=1,
    max_queue_size=10,
    workers=1,
    use_multiprocessing=False,
    **kwargs
)

fit 函数存在返回值,可有 history = model.fit… 中间运行的数据结果

  • get_layer 根据层的名称(惟一的)或索引检索层
get_layer(
    name=None,
    index=None
)
  • load_weights 从TensorFlow或HDF5权值文件加载所有层权值
load_weights(
    filepath,
    by_name=False,
    skip_mismatch=False
)
  • pop 删除模型中的最后一层。
pop()
  • predict 为输入样本生成输出预测,计算是分批进行的。
predict(
    x,
    batch_size=None,
    verbose=0,
    steps=None,
    callbacks=None,
    max_queue_size=10,
    workers=1,
    use_multiprocessing=False
)

参考:
https://blog.csdn.net/zjw642337320/article/details/81204560
谷歌官方文档

### TensorFlow 2.7.0 中 `ImageDataGenerator` 的 GPU 配置与使用 #### 正确导入 `ImageDataGenerator` 在 TensorFlow 2.7.0 中,可以通过以下方式导入 `ImageDataGenerator`: ```python from tensorflow.keras.preprocessing.image import ImageDataGenerator ``` 此模块主要用于图像增强和预处理操作,适用于小型数据集或需要实时数据增强的情况[^1]。 --- #### 设置 GPU 支持 为了确保 TensorFlow 能够利用 GPU 加速计算,在运行代码之前需确认 GPU 已被正确识别。以下是启用 GPU 的基本步骤: 1. **验证 GPU 可用性** 运行以下代码以检查是否有可用的 GPU 设备: ```python import tensorflow as tf gpus = tf.config.list_physical_devices('GPU') if gpus: print(f"Detected {len(gpus)} GPUs") else: print("No GPU detected.") ``` 2. **限制显存分配** 默认情况下,TensorFlow 会占用所有可用显存。为了避免内存不足问题,可动态调整显存分配策略: ```python for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) ``` 通过上述设置,可以有效减少因显存管理不当而导致的错误[^3]。 --- #### 使用 `ImageDataGenerator` 的示例 下面是一个完整的示例,展示了如何结合 GPU 和 `ImageDataGenerator` 来加载和预处理图像数据: ```python import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 检查 GPU 是否可用 gpus = tf.config.list_physical_devices('GPU') if gpus: try: # 动态增长显存 for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) except RuntimeError as e: print(e) # 定义 ImageDataGenerator 实例 datagen = ImageDataGenerator( rescale=1./255, # 将像素值缩放到 [0, 1] rotation_range=40, # 随机旋转角度范围 (degrees) width_shift_range=0.2, # 水平随机移动比例 height_shift_range=0.2, # 垂直随机移动比例 shear_range=0.2, # 错切变换强度 zoom_range=0.2, # 缩放比例 horizontal_flip=True # 水平翻转 ) # 从指定目录加载训练数据 train_generator = datagen.flow_from_directory( 'data/train', # 训练数据路径 target_size=(150, 150), # 调整输入图像大小 batch_size=32, class_mode='binary' # 输出标签模式(此处为二分类) ) # 构建简单的 CNN 模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') # 二分类输出层 ]) # 编译模型 model.compile(optimizer=tf.keras.optimizers.Adam(), loss='binary_crossentropy', metrics=['accuracy']) # 开始训练 history = model.fit(train_generator, epochs=10) ``` 在此示例中,`ImageDataGenerator` 提供了多种数据增强功能,而 GPU 则加速了卷积运算和其他矩阵乘法操作。 --- #### 注意事项 1. **性能瓶颈分析** 如果发现 GPU 占用率较低,可能是因为 CPU 数据准备速度跟不上 GPU 的计算能力。此时建议改用 `tf.data.Dataset` 接口来替代 `ImageDataGenerator`,因为后者更适合大规模分布式场景下的高效数据流水线[^2]。 2. **版本兼容性** 确保所使用的 CUDA 和 cuDNN 版本与 TensorFlow 2.7.0 兼容。具体依赖关系可通过官方文档查询。 3. **资源监控工具** 在调试过程中,推荐使用 NVIDIA 提供的 `nvidia-smi` 或 TensorBoard 插件监视 GPU 使用情况,以便及时发现问题并优化程序性能[^4]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yqiahb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值