有没有好的网站,广州网址大全,珠海工程建设信息网站,分类信息免费发布大全前言
之前有写过几篇TensorFlow相关文章#xff0c;但是用的比较底层的写法#xff0c;比如tf.nn和tf.layers#xff0c;也写了部分基本模型如自编码和对抗网络等#xff0c;感觉写起来不太舒服#xff0c;最近看官方文档发现它的教程基本都使用的keras API#xff0c;这…前言
之前有写过几篇TensorFlow相关文章但是用的比较底层的写法比如tf.nn和tf.layers也写了部分基本模型如自编码和对抗网络等感觉写起来不太舒服最近看官方文档发现它的教程基本都使用的keras API这就尴尬了学一波 国际惯例参考博客 官方开始案例 keras比tensorflow差在哪里
其实网上有很多博客了但是为实验了一下跑不起来而且按照官方文档理解的使用算法和网络上的博客又不同比如这位大佬的博客中有这样一行代码
model.add(Dense(input_dim1, output_dim1, inituniform, activationlinear))但是我去找官方文档tf.keras.Dense发现并没input_dim,output_dim这两个参数很多博客都有这样写难道是keras而非是以keras为前端的Tensorflow的参数感觉看着迷迷糊糊还不如自己按照官方文档手撸一波。 学习步骤还是之前的思路线性回归全连接的手写数字分类卷积RNNRBM
【注】如果本地电脑没有TensorFlow环境可以试用官方提供的在线编辑调试网站colab灰常方便而且还能启动GPU和TPU这也太良心了吧在colab的修改-笔记本设置-硬件加速可以启用
线性回归
直接用 $ y3x5$ 这个函数 引入相关包 import tensorflow as tf
import numpy as np
from tensorflow import keras建立数据集 trXnp.linspace(-1,1,101)
trY3*trX5创建模型只具有一个单隐层三种写法其实我更喜欢第三种写法 #写法一
#modeltf.keras.models.Sequential([
# keras.layers.Flatten(),
# keras.layers.Dense(1)
])
#写法二
# model keras.Sequential()
# model.add(keras.layers.Flatten())
# model.add(keras.layers.Dense(units1,use_biasTrue))
#写法三
inputs tf.keras.Input(shape[1,])
x tf.keras.layers.Dense(1)(inputs)
model tf.keras.models.Model(inputsinputs,outputsx)这里注意的就是层的使用方法了首先要用Sequential建立一个序列容器然后再将模型逐层add进来Flatten是展平向量Dense是全连接。或者第三种方法tf.keras.models.Model将输入输出嵌入模型中。 【注意】 写法一和二是无法直接打印网络结构的因为没指定网络输入大小或者没开始训练强行打印的方法就是在Sequential的第一层加入input_shape[x,x]这样的参数比如 modeltf.keras.models.Sequential([keras.layers.Dense(1,input_shape[1,])
])这样上述三种方法都可以用model.summary()打印网络结构了。 编译优化算法 model.compile(optimizertf.train.RMSPropOptimizer(learning_rate0.01),lossmse,metrics[mae])这里需要注意的是三个参数optimizer不建议直接写adam,sgd之类的最好是用tf自带的优化器loss表示损失这个不太清楚MSE在tf中怎么点出来只好用mse的形式写了评估函数是mae这个回头看看怎么去掉引号 训练 model.fit(trX,trY,epochs1000)查看权重 以上基本是完成了参数学习过程有时候我们希望看看参数这里可以先输出每层的名称看看都存了啥 print(model.layers)[tensorflow.python.keras.layers.core.Flatten object at 0x0000027AED6A3978, tensorflow.python.keras.layers.core.Dense object at 0x0000027AED6A3D68]我们需要的权重在第二个layers里面因为从0开始编号所以取权重的方法是 model.layers[1].get_weights()[array([[2.987659]], dtypefloat32), array([5.0043736], dtypefloat32)]很容易发现不仅把权重输出了偏置项也在 评估模型 我们也可以制作训练集查看误差 model.evaluate(trX,trY)101/101 [] - 0s 594us/step
[4.496799705845147e-07, 0.000640394664046788]感觉第一个应该是损失第二个是误差 预测数值 输入10那么y3*10535 model.predict([10])array([[34.997227]], dtypefloat32)基本的使用都在这里了相对于使用更底层的TensorFlow代码貌似用keras更加方面了尤其是建立模型和预测结果上
分类 导入相关包 import tensorflow as tf导入数据手写数字 mnisttf.keras.datasets.mnist
(x_train,y_train),(x_test,y_test)mnist.load_data()
x_train,x_testx_train/255.0,x_test/255.0#归一化创建模型 #创建模型
modeltf.keras.models.Sequential([tf.keras.layers.Flatten(),tf.keras.layers.Dense(512,activationtf.nn.relu),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10,activationtf.nn.softmax)
])编译优化算法 #编译模型
model.compile(optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy])训练和评估 model.fit(x_train,y_train,epochs5)
model.evaluate(x_test, y_test)Epoch 1/5
60000/60000 [] - 15s 250us/step - loss: 0.2026 - acc: 0.9406
Epoch 2/5
60000/60000 [] - 13s 213us/step - loss: 0.0809 - acc: 0.9751
Epoch 3/5
60000/60000 [] - 13s 209us/step - loss: 0.0524 - acc: 0.9832
Epoch 4/5
60000/60000 [] - 12s 206us/step - loss: 0.0374 - acc: 0.9880
Epoch 5/5
60000/60000 [] - 12s 202us/step - loss: 0.0280 - acc: 0.9913
10000/10000 [] - 1s 70us/step
[0.0750152821913769, 0.9798]后记
感觉前面还是不够简化因为学到这里我们在编译模型时只会使用引号定义优化方法作为一名码农还是喜欢点点点地点出来 看官网的介绍
compile(optimizer,lossNone,metricsNone,loss_weightsNone,sample_weight_modeNone,weighted_metricsNone,target_tensorsNone,distributeNone,**kwargs
)部分参数描述
optimizer优化器的字符串名字或者优化器实例具体看optimizersloss目标函数的名字或者目标函数看lossmetrics训练或测试模型所使用的评估方法一般使用metrics[accuracy]
当我们点击优化器和loss的时候很容易发现这两个东东都隶属于tf.keras的类尝试点一下 除了最后一个常用accuracy不清楚还能用什么以外差不多已经达到了解放双手的效果我们只需要尝试点点点就能依据智能提示构建一个非常简单的keras模型其实后来想了想有时候我们的目标函数和评估函数是一样的那么能否直接使用tf.keras.losses里面的损失函数作为评估函数呢然后试了一下稳如狗可以但是要注意是列表形式放进去
比如上面分类例子中使用的
model.compile(optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy])可以换成
#初始化一个优化方法实例
optimtf.keras.optimizers.Adam();
#编译模型
#编译模型
model.compile(optimizer optim,losstf.keras.losses.sparse_categorical_crossentropy,metrics[tf.keras.losses.MSE])后记
接下来就要看看如何使用自己的数据去训练keras构建的模型从第一个回归的例子来看好像没有之前学tensorflow一样那么麻烦需要使用比较复杂的数据流。
下节预告构建手写数字分类系统使用卷积的方法并且要能保存和调用模型
本章代码戳这里 记得使用colab打开可以直接运行美滋滋