【TensorFlow模型构建】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,神经网络,深度学习)