深度学习学习笔记——keras搭建网络模型

一、Sequential()

(一)第一层是全连接层

def generator_model():
    model = Sequential()
    model.add(Dense(input_dim=100, output_dim=1024))
    model.add(Activation('relu'))
    model.add(Dense(128*7*7))
    model.add(BatchNormalization())
    model.add(Activation('relu'))
    model.add(Reshape((7, 7, 128), input_shape=(128*7*7,)))
    model.add(UpSampling2D(size=(2, 2)))
    model.add(Conv2D(64, (5, 5), padding='same'))
    model.add(Activation('tanh'))
    model.add(UpSampling2D(size=(2, 2)))
    model.add(Conv2D(1, (5, 5), padding='same'))
    model.add(Activation('tanh'))
    return model

每个隐藏层由前一层提供输入,只需为第一层指定输入维度

model.add(Dense(32, input_dim=13, activation='relu'))
model.add(10, activation='sigmoid')

(二) 第一层是卷积层

def discriminator_model():
    model = Sequential()
    model.add(
            Conv2D(64, (5, 5),
            padding='same',
            input_shape=(28, 28, 1))
            )
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Conv2D(128, (5, 5)))
    model.add(Activation('tanh'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Flatten())
    model.add(Dense(1024))
    model.add(Activation('tanh'))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    return model

使用时直接调用即可

d = discriminator_model()
g = generator_model()

(三) 也可在Sequential()里使用Model()

 def build_generator(self):
        model = Sequential()

        model.add(Dense(256, input_dim=self.latent_dim))
        model.add(LeakyReLU(alpha=0.2))
        model.add(BatchNormalization(momentum=0.8))

        model.add(Dense(512))
        model.add(LeakyReLU(alpha=0.2))
        model.add(BatchNormalization(momentum=0.8))

        model.add(Dense(1024))
        model.add(LeakyReLU(alpha=0.2))
        model.add(BatchNormalization(momentum=0.8))

        model.add(Dense(np.prod(self.img_shape), activation='tanh'))
        model.add(Reshape(self.img_shape))

        noise = Input(shape=(self.latent_dim,))
        img = model(noise)

        return Model(noise, img)

)

总结:Dense(input_dim=),全连接层输入肯定是一维
Conv2D(input_shape=()),卷积层输入是元组形式
Input(shape=()),输入是元组形式

# this is a logistic regression in Keras
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)

二、Model()

参数:
inputs:模型的输入:一个keras.Input对象或对象列表 keras.Input。
outputs:模型的输出。
name:字符串,模型的名称。

有两种方法可实例化一个模型

(一)使用“功能API"
从Input开始,链接层调用以指定模型的前向传递,最后根据输入和输出创建模型

import tensorflow as tf
inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

(二) 通过对Model类进行子类化

在这种情况下,应该在 __init__中定义层,并且应该在call中实现模型的前向传递。

import tensorflow as tf

class MyModel(tf.keras.Model):

  def __init__(self):
    super(MyModel, self).__init__()
    self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
    self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)

  def call(self, inputs):
    x = self.dense1(inputs)
    return self.dense2(x)

model = MyModel()

以下来自tensorflow官方文档
链接

tf.keras.Sequential()

先说总结:
使用sequential搭建模型时往往需要在第一层指定输入的形状,后面的层则不需要,通过自动计算前一层输出来确定输入,(指定输入形状的方式:1、通过Dense(input_shape=(16,)),2、通过Dense(input_dim=16),3、通过Conv2D(input_shape=(16,16,3)),4、通过Input(shape=(16,)));也可以不指定输入形状,这时直到训练,评估、预测模型前,网络都不会建立起来不会有任何参数,当使用这些方法时,由于有了输入知道输入形状模型会被建立起来,而在第一层就确定输入形状时,每添加一层网络,模型都会建立,也可以通过model.build(batch,input_shape)来手动构建模型。

tf.keras.Sequential(
    layers=None, name=None
)
# 可选地,第一层可以接收' input_shape '参数:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8, input_shape=(16,)))
#之后,我们进行自动形状推断:
model.add(tf.keras.layers.Dense(4))
# 这是相同的如下:
model = tf.keras.Sequential()
model.add(tf.keras.Input(shape=(16,)))
model.add(tf.keras.layers.Dense(8))
# 注意,你也可以忽略' input_shape '参数。
# 在这种情况下,模型在第一次调用训练/评估方法之前没有任何权重(因为它还没有建立):
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8))
model.add(tf.keras.layers.Dense(4))
#模型。尚未创建权重
# 然而,如果你指定了输入形状,当你添加图层时,模型就会不断地建立起来:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8, input_shape=(16,)))
model.add(tf.keras.layers.Dense(4))
len(model.weights)

# 当使用延迟构建模式(没有指定输入形状)时,你可以通过调用' build(batch_input_shape) '来手动构建模型:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8))
model.add(tf.keras.layers.Dense(4))
model.build((None, 16))
len(model.weights)

# 请注意,当使用延迟构建模式(没有指定输入形状)时,
# 模型会在您第一次调用' fit '、' eval '或' predict '时构建,
# 或者在一些输入数据上第一次调用模型时构建。
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer='sgd', loss='mse')
# 第一次建立模型:
model.fit(x, y, batch_size=32, epochs=10)

在这里插入图片描述

在这里插入图片描述
总结:使用tensorflow搭建神经网络:用Sequential直接搭建出model,使用Input和Model搭配搭建出model(model=Model(inputs=,outputs=)),使用Model搭配class类搭建出model(model=类名()),此时并不用指出输入形状,前两种必须说明输入形状,可以在第一层说明,也可以接触Input说明。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Keras是一个基于Python的深度学习库,用于创建和训练神经网络。在使用Keras进行水体提取时,可以结合卷积神经网络(Convolutional Neural Networks, CNN)进行图像分割和分类。 为了提取水体,可以采取以下步骤: 1. 数据准备:准备一组水体和非水体的图像样本,这些样本应包含已标注水体和非水体的区域。 2. 数据预处理:在使用样本进行训练之前,需要对样本进行预处理。这包括对图像进行裁剪、缩放和归一化等操作,以确保数据的一致性。 3. 构建卷积神经网络模型:使用Keras搭建一个适合水体提取任务的卷积神经网络模型。可以选择一种常见的架构,如VGGNet、ResNet或U-Net,并根据具体情况进行调整。 4. 训练模型:利用准备好的数据集对模型进行训练。通过反向传播算法不断调整模型参数,使模型能够对水体和非水体进行准确的分类。 5. 模型评估和调优:使用训练好的模型对测试集进行评估,计算模型的精度、召回率、F1分数等指标。根据评估结果,可能需要对模型进行进一步调优。 6. 水体提取:使用训练好的模型对未知图像进行水体提取。将待处理图像输入模型中,模型会对图像进行预测,得到图像中水体的位置和边界。 Keras提供了简洁而强大的API,使得深度学习任务变得更加容易。通过合理选择网络架构和训练样本,结合Keras进行神经网络深度学习水体提取,可以提高水体提取的准确性和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值