keras简单建模(带注释)

线性堆积模型

# 导入keras
import tensorflow as tf
import keras
from keras import layers
import numpy as np
print("tensorflow的版本:", tf.__version__)
print("keras的版本", keras.__version__)
# 随机构造输入数据
train_x = np.random.random((1000,64))
train_y = np.random.random((1000,10))
val_x = np.random.random((100,64))
val_y = np.random.random((100,10))
# Sequential 模型
model = tf.keras.Sequential() # 建立模型框架
model.add(layers.Dense(32, activation='relu')) # 往框架里添加Dense层,32为神经元个数,激活函数为relu
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax')) # 最后一层为输出,输出的神经元个数应于分类类数(回归的输出)一样,激活函数为softmax(为概率分布)

网络说明

activation:设置层的激活函数。默认情况下,系统不会设置该层激活函数。
常用的激活函数有sigmoid,tanh,relu,leaky relu,ELU
kernel_regularizer & bias_regularizer:应用层权重(核和偏差)的正则化,例如 L1 或 L2。默认情况下,不会应用正则化函数。

编译模型

model.compile(optimizer = 优化器,loss = 损失函数,metrics = ["准确率”])

model.complie(optimizer=tf.keras.optimizer.Adam(0.001),loss=tf.keras.losses.categorical_crossentropy,metrics=[tf.keras.metrics.categorical_accuracy])

optimizer: 可以是字符串形式给出的优化器名字,也可以是函数形式,使用函数形式可以设置学习率、动量和超参数

例如:“sgd” 或者 tf.optimizers.SGD(lr = 学习率,decay = 学习率衰减率,momentum = 动量参数)
“adagrad" 或者 tf.keras.optimizers.Adagrad(lr = 学习率,decay = 学习率衰减率)
”adadelta" 或者 tf.keras.optimizers.Adadelta(lr = 学习率,decay = 学习率衰减率)
“adam" 或者 tf.keras.optimizers.Adam(lr = 学习率,decay = 学习率衰减率

loss: 可以是字符串形式给出的损失函数的名字,也可以是函数形式.例如:”mse" 或者 tf.keras.losses.MeanSquaredError()
“sparse_categorical_crossentropy” 或者 tf.keras.losses.SparseCatagoricalCrossentropy(from_logits = False)损失函数经常需要使用softmax函数来将输出转化为概率分布的形式,在这里from_logits代表是否将输出转为概率分布的形式,为False时表示转换为概率分布,为True时表示不转换,直接输出.

Metrics: 标注网络评价指标
例如:“accuracy” : y_ 和 y 都是数值,如y_ = [1] y = [1] #y_为真实值,y为预测值.
“sparse_accuracy": y_和y都是以独热码 和概率分布表示,如y_ = [0, 1, 0], y = [0.256, 0.695, 0.048]
“sparse_categorical_accuracy” : y_是以数值形式给出,y是以 独热码给出,如y_ = [1], y = [0.256 0.695, 0.048]

训练模型

fit( x, y, batch_size=32, epochs=10, verbose=1, callbacks=None,
validation_split=0.0, validation_data=None, shuffle=True, 
class_weight=None, sample_weight=None, initial_epoch=0)

x :输入数据。如果模型只有一个输入,那么x的类型是numpy
array,如果模型有多个输入,那么x的类型应当为list,list的元素是对应于各个输入的numpy array
y :标签,numpy array
batch_size :整数,指定进行梯度下降时每个batch包含的样本数。训练时一个batch的样本会被计算一次梯度下降,使目标函数优化一步。
epochs :整数,训练终止时的epoch值,训练将在达到该epoch值时停止,当没有设置initial_epoch时,它就是训练的总轮数,否则训练的总轮数为epochs - inital_epoch
verbose :日志显示,0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
callbacks :list,其中的元素是keras.callbacks.Callback的对象。这个list中的回调函数将会在训练过程中的适当时机被调用,参考回调函数
validation_split :0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标,如损失函数、精确度等。注意,validation_split的划分在shuffle之前,因此如果你的数据本身是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。
validation_data :形式为(X,y)的tuple,是指定的验证集。此参数将覆盖validation_spilt。
shuffle :布尔值或字符串,一般为布尔值,表示是否在训练过程中随机打乱输入样本的顺序。若为字符串“batch”,则是用来处理HDF5数据的特殊情况,它将在batch内部将数据打乱。
class_weight :字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)
initial_epoch : 从该参数指定的epoch开始训练,在继续之前的训练时有用。
fit函数返回一个History的对象,其History.history属性记录了损失函数和其他指标的数值随epoch变化的情况,如果有验证集的话,也包含了验证集的这些指标变化情况

# 例如
 model.fit(train_data=train_data,      #训练数据集  
          eval_data=val_data,         #测试数据集  
          batch_size=64,                  #一个批次的样本数量  
          epochs=50,                      #迭代轮次  
          save_dir="/home/aistudio/xxx",  #把模型参数、优化器参数保存至自定义的文件夹  
          save_freq=1,                    #设定每隔多少个epoch保存模型参数及优化器参数  
          log_freq=100,                   #打印日志的频率  
          verbose = 1                     #日志打印格式  
)

评估和预测模型

test_x = np.random.random((1000, 64)) # 测试数据x
test_y = np.random.random((1000, 10)) # 测试数据y
model.evaluate(test_x, test_y, batch_size=32) # 手动评估(val_loss 与val_acc 为自动评估的结果)
# 预测
result = model.predict(test_x, batch_size=32)
print(result)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值