使用Keras/Tensorflow.keras子类API构建复杂模型

本文详细介绍了如何使用Keras的Model API构建四种不同类型的深度学习模型:简单顺序模型、短路径顺序模型、多输入顺序模型和多输入多输出模型。每个模型的构建过程和训练步骤都进行了清晰的展示,包括输入层、隐藏层和输出层的定义,以及模型的编译和评估。这些模型涵盖了基本的神经网络结构和进阶的模型设计技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍了几种使用keras.Model API构建深度网络模型的基本方法。

1. 简单顺序模型

      模型由输入层、隐藏层、和输出层顺序连接构成(如图1所示)

图1. 简单顺序模型示意图

(1) 定义模型结构

def build_model(X_train):

      input_layer = keras.layers.Input(shape=X_train.shape[1:])

      hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input_layer)

      hidden2_layer = keras.layers.Dense(30, activation=‘linear’)(hidden1_layer)

      output_layer  = keras.layers.Dense(1)(hidden2_layer)

      model = keras.Model(inputs=input_layer, outputs=output_layer)

      return model

(2) 建模训练

model = build_model(X_train)

model.compile(loss=‘mse’, optimizer=keras.optimizers.SGD(lr=1e-3))

model.fit(X_train, Y_train)

eval = model.evaluate(X_val, Y_val)

Y_pred = model.pred(X_test)


 2. 短路径顺序模型

      模型由输入层、隐藏层、输出层和短路径连接构成(如图2所示)

 图2. 短路径顺序模型示意图

(1) 定义模型结构(注意红色字体部分)

def build_model(X_train):

      input_layer = keras.layers.Input(shape=X_train.shape[1:])

      hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input_layer)

      hidden2_layer = keras.layers.Dense(30, activation=‘linear’)(hidden1_layer)

      concat_layer = keras.layers.Concatenate()([input_layer, hidden2_layer])

      output_layer  = keras.layers.Dense(1)(concat_layer)

      model = keras.Model(inputs=input_layer, outputs=output_layer)

      return model

(2) 建模训练

model = build_model(X_train)

model.compile(loss=‘mse’, optimizer=keras.optimizers.SGD(lr=1e-3))

model.fit(X_train, Y_train)

eval = model.evaluate(X_val, Y_val)

Y_pred = model.pred(X_test)


 3. 多输入顺序模型

      模型由两个及以上输入层、隐藏层、输出层和短路径连接构成(如图3所示)

  图3. 多输入顺序模型示意图

(1) 定义模型结构(注意红色字体部分)

def build_model(X_train1, X_train2):

      input1_layer = keras.layers.Input(shape=X_train1.shape[1:])

      input2_layer = keras.layers.Input(shape=X_train2.shape[1:])

      hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input1_layer)

      hidden2_layer = keras.layers.Dense(30,            activation=‘linear’)(hidden1_layer)

      concat_layer = keras.layers.Concatenate()([input2_layer, hidden2_layer])

      output_layer  = keras.layers.Dense(1)(concat_layer)

      model = keras.Model(inputs=[input1_layer, input2_layer], outputs=output_layer)

      return model

(2) 建模训练(注意红色字体部分)

model = build_model(X_train1, X_train2)

model.compile(loss=‘mse’, optimizer=keras.optimizers.SGD(lr=1e-3))

history = model.fit((X_train1, X_train2), Y_train)

eval = model.evaluate((X_val1, X_val2), Y_val)

Y_pred = model.pred((X_test1, X_test2))


 4. 多输入多输出模型

      模型由两个及以上输入层、隐藏层、两个及以上输出层连接构成(如图4所示)

  图4. 多输入多输出模型示意图

(1) 定义模型结构(注意红色字体部分)

def build_model(X_train1, X_train2):

      input1_layer = keras.layers.Input(shape=X_train1.shape[1:])

      input2_layer = keras.layers.Input(shape=X_train2.shape[1:])

      hidden1_layer = keras.layers.Dense(30, activation=‘ReLU’)(input1_layer)

      hidden2_layer = keras.layers.Dense(30,            activation=‘linear’)(hidden1_layer)

      concat_layer = keras.layers.Concatenate()([input2_layer, hidden2_layer])

      output1_layer  = keras.layers.Dense(1, name=‘main_output’)(concat_layer)

      ouput2_layer = keras.layers.Dense(1, name=‘aux_output)(hidden2_layer)

      model = keras.Model(inputs=[input1_layer, input2_layer], outputs=[output1_layer, output2_layer])

      return model

(2) 建模训练(注意红色字体部分)

model = build_model(X_train1, X_train2)

model.compile(loss=[‘mse’, ‘mse’], loss_weight=[0.9, 0.1], optimizer=keras.optimizers.SGD(lr=1e-3))

history = model.fit((X_train1, X_train2), (Y_train1, Y_train2))

eval = model.evaluate((X_val1, X_val2), (Y_val1, Y_val2))

Y_pred1, Y_pred2 = model.pred((X_test1, X_test2))


参考文献:

[1] A GéRon. Hands-on machine learning with Scikit-Learn and TensorFlow : concepts, tools, and techniques to build intelligent systems.  2017.

AttributeError: module 'tensorflow._api.v2.compat.v2.__internal__' has no attribute 'register_load_context_function'. Did you mean: 'register_call_context_function'? PS D:\Learn\Keras-GAN-master> ^C PS D:\Learn\Keras-GAN-master> ^C PS D:\Learn\Keras-GAN-master> & D:/Anaconda3/envs/tf1cpu/python.exe d:/Learn/Keras-GAN-master/context_encoder/context_encoder.py 2025-03-19 15:44:14.482172: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`. 2025-03-19 15:44:15.713157: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`. Traceback (most recent call last): File "d:\Learn\Keras-GAN-master\context_encoder\context_encoder.py", line 7, in <module> from keras.layers.advanced_activations import LeakyReLU ModuleNotFoundError: No module named 'keras.layers.advanced_activations' PS D:\Learn\Keras-GAN-master> ^C 修改代码吧 from keras.datasets import cifar10 from keras.layers import Input, Dense, Reshape, Flatten, Dropout, multiply, GaussianNoise from keras.layers import BatchNormalization, Activation, Embedding, ZeroPadding2D from keras.layers import MaxPooling2D from keras.layers.advanced_activations import LeakyReLU from keras.layers.convolutional import UpSampling2D, Conv2D from keras.models import Sequential, Model from keras.optimizers import Adam from keras import losses from keras.utils import to_categorical import keras.backend as K import matplotlib.pyplot as plt import numpy as np class ContextEncoder(): def __init__(self): self.img_rows = 32 self.img_cols = 32 self.mask_height = 8 self.mask_width = 8
最新发布
03-20
### TensorFlowKeras 的版本兼容性问题分析 遇到 `AttributeError` 或者 `ModuleNotFoundError` 类型的错误通常是因为安装的库版本不匹配或者某些功能已被废弃或更改。以下是针对所提到的具体问题及其解决方案。 #### 1. 关于 `AttributeError: module 'tensorflow._api.v2.compat.v2.__internal__' has no attribute 'register_load_context_function'` 此错误表明当前使用TensorFlow 版本中不存在名为 `'register_load_context_function'` 的属性[^1]。这可能是因为该函数已经被移除或者是内部实现细节发生了变化。建议检查以下几点: - **确认 TensorFlow 版本** 使用命令 `pip show tensorflow` 查看已安装的 TensorFlow 版本号。 - **升级至最新稳定版** 如果使用的是较旧版本,可以尝试更新到最新的稳定版本: ```bash pip install --upgrade tensorflow ``` - **查阅官方文档** 部分内部 API 可能仅用于开发调试,在正式发布时不对外公开。如果确实需要这些功能,可查看对应版本的 [TensorFlow 官方变更日志](https://github.com/tensorflow/tensorflow/releases)。 --- #### 2. 关于 `ModuleNotFoundError: No module named 'keras.layers.advanced_activations'` Keras 中的部分模块结构在不同版本之间有所调整。例如,`advanced_activations` 已被整合到更通用的层定义中[^2]。具体解决方法如下: - **替换为新的激活函数类名** 将原有的 `AdvancedActivation` 替换为其对应的子类名称。例如: ```python from keras.layers import LeakyReLU, PReLU model.add(LeakyReLU(alpha=0.1)) ``` - **验证 KerasTensorFlow 的集成方式** 确认是否正在使用 TensorFlow 自带的 Keras 实现(推荐)。可以通过以下代码测试: ```python import tensorflow as tf print(tf.keras.__version__) ``` - **重新安装依赖项** 清理现有环境并重装指定版本的 TensorFlowKeras: ```bash pip uninstall tensorflow keras pip install tensorflow==2.x # 根据需求选择合适的版本 ``` --- #### 3. 总体版本兼容性注意事项 为了减少因版本差异引发的问题,需注意以下事项: - **锁定依赖版本** 创建一个虚拟环境,并通过 `requirements.txt` 文件固定所有依赖包的版本号。例如: ```plaintext tensorflow==2.9.1 numpy==1.21.5 h5py==3.7.0 ``` - **参考官方支持矩阵** 不同版本的 TensorFlow 对应特定范围内的 Python 和其他第三方库版本。详情参见[TensorFlow 支持平台页面]。 - **避免混用独立 Keras 库** 当前推荐优先采用 `tf.keras` 而非单独安装的 Keras 包,因为后者可能导致冲突或额外维护成本增加。 --- ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LeakyReLU model = Sequential([ Dense(64, input_shape=(None,)), LeakyReLU(alpha=0.1), Dense(1) ]) model.compile(optimizer='adam', loss='mse') print(model.summary()) ``` 上述代码展示了如何利用 TensorFlow 提供的标准接口构建模型,从而规避潜在的命名空间冲突风险。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值