Tensorflow(三) tf.keras的相关东西

一 什么是Keras


        Keras是一个由Python编写的开源人工神经网络库,可以作Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。
        Keras相当于比Tensorflow和Theano更高一层的库,其可以以Tensorflow或者Theano为底层框架,以更加简洁、高效的方式添加代码。
 

二 keras中的函数

1 .tf.keras读取图片,修改大小和输入tensorflow

#  tf.keras读取图片和改变图片大小

from tensorflow.python.keras.preprocessing.image import load_img

def main():

    image= load_img("./picture/微信截图_20220302145534.png/",target_size=(300,300))

    print(image)

if __name__ == '__main__':
    main()

 其中,load_img("地址“,target_size=改变后图片的大小)

输出为<PIL.Image.Image image mode=RGB size=300x300 at 0x1BA401B8358>

由于读取出来的类型不能直接在Tensorflow中使用,所以需要进行类型转换

#  tf.keras读取图片和改变图片大小

from tensorflow.python.keras.preprocessing.image import load_img,img_to_array

def main():

    image= load_img("./picture/微信截图_20220302145534.png/",target_size=(300,300))
    print(image)

    # 由于读取出来的类型不能直接在Tensorflow中使用,所以需要进行类型转换
    image=img_to_array(image)
    print(image.shape)
    print(image)

if __name__ == '__main__':
    main()

其中 img_to_array(img,data_format=None,dtype=None)

img:代表待处理的图片位置

data_format :Image data format,either "channels_first" or "channel_last"

有两种格式:NHCW,排列顺序为(batch,height,weidth,channels)    (张数,竖直,水平,通道),tensorflow默认

                    NCHW,排列顺序为(batch,channels,height,weidth,)     (张树,通道,数值,水平)

dtype=None:不清楚

输出结果为:

<PIL.Image.Image image mode=RGB size=300x300 at 0x2B65AD88860>
(300, 300, 3)
[[[122. 110. 156.]
  [118. 106. 152.]
  [117. 105. 151.]
  ...---------
  

 2.tf.keras数据集

from keras.datasets import fashion_mnist

def main():
    (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

    print(x_train.shape)
    print(y_train.shape)


if __name__ == '__main__':
    main()

输出为:

(60000, 28, 28)
(60000,)

三 tf.keras构建网络模型步骤

1.  获取数据集

2    构建模型

import tensorflow as tf
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense,Flatten


def main():
   model=Sequential([
        Flatten(input_shape=(28,28)),
        Dense(64,activation=tf.nn.relu),
        Dense(128,activation=tf.nn.relu),
        Dense(10,activation=tf.nn.softmax)
    ])


if __name__ == '__main__':
    main()

       2,Sequential又称为序贯模型。
                序贯模型为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。
                在利用Keras进行模型构建前,只需要用如下函数建立模型就够了。

model = Sequential(flatten,Dense,)

flatten:将输入数据进行形状改变展开

Dense:添加一层神经元

        Dense(units,activation=None,**kwargs)

                units:神经元个数

                activation:激活函数,参考(tf.nn.relu,tf.nn.sigmoid,tf.nn.softmax,tf.nn.tanh)

                kwargs:输入上层输入的形状,input_shape=()

1、model.compile
model.compile在Keras中的作用主要用于定义loss函数和优化器。
其调用方式如下:

model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])
1
其中loss用于定义计算损失的损失函数,其可以选择的内容如下:
1、mse:均方根误差,常用于回归预测。
2、categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列,常用于分类。
3、sparse_categorical_crossentrop:如上,但接受稀疏标签。

 optimizer用于定义优化器,可以使用默认的,也可以从keras.optimizers导出。上文中选择的是随机梯度下降法sgd。

metrics=[‘accuracy’]常用于分类运算中,本例子中不适用,accuracy代表计算分类精确度

3  训练

model.fit()

(x,y,batch_size,epoch,callbacks)

x:特征值

y:目标值

batch_size: 批次大小

epochs:训练迭代次数

callbacks:添加回调列表(如用于tensorboard显示等)

评估:

model.evaluate(test,test_label)

4 预测

model.predict(test)

其他方法:

model.save_weights(file)

model.load_weights(file,by_name=False)

                

上一篇:使用 Java SDK 获取 MaxCompute 的表结构并写入到 Excel 中


下一篇:spark写文件到odps报错异常