当前位置:   article > 正文

Tensorflow之知识图谱---(2)Keras快速入门_tensorflow 知识图谱

tensorflow 知识图谱

目录

一、数据集:鸢尾花数据集 iris

二、Keras顺序模型Sequential()

三、使用Keras函数式编程

1.Input函数 

 2.用model自带save函数保存数据

四、使用TensorFlow标准化编译

1.数据输入形式的改变

2.构建网络层级

3.建立模型 Model

4.编译模型 compile

5.训练模型 fit

6.模型评价 evaluate


一、数据集:鸢尾花数据集 iris

一般的机器学习工具自带iris数据集 --- sklearn包中

  • sklearn包安装:一定要注意版本冲突!!!

pip install -U scikit-learn 

  • 下载好后直接调用

from sklearn.datasets import load_iris 

data = load_iris()

二、Keras顺序模型Sequential()

  1. import numpy as np
  2. import tensorflow as tf
  3. from sklearn.datasets import load_iris
  4. data=load_iris()
  5. iris_target = data.target
  6. iris_data = np.float32(data.data)
  7. iris_target = np.float32(tf.keras.utils.to_categorical(iris_target,num_classes=3))
  8. iris_data = tf.data.Dataset.from_tensor_slices(iris_data).batch(50)
  9. iris_target = tf.data.Dataset.from_tensor_slices(iris_target).batch(50)
  10. model = tf.keras.models.Sequential()
  11. model.add(tf.keras.layers.Dense(32,activation='relu'))
  12. model.add(tf.keras.layers.Dense(64,activation='relu'))
  13. model.add(tf.keras.layers.Dense(3,activation='softmax'))
  14. opt = tf.optimizers.Adam(1e-3)
  15. for epoch in range(1000):
  16. for _data,label in zip(iris_data,iris_target):
  17. with tf.GradientTape() as tape:
  18. logits = model(_data)
  19. loss_value = tf.reduce_mean(tf.keras.losses.categorical_crossentropy(y_true=label,y_pred =logits))
  20. grads = tape.gradient(loss_value,model.trainable_variables)
  21. opt.apply_gradients(zip(grads,model.trainable_variables))
  22. print("epoch",epoch,"'s training loss is:",loss_value.numpy())
  •  顺序模型:先定义model 再model.add()来添加网络层
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(32,activation='relu'))
model.add(tf.keras.layers.Dense(64,activation='relu'))
model.add(tf.keras.layers.Dense(3,activation='softmax'))
  •  模型训练 初始化思路
for epoch in range(1000):
    for _data,label in zip(iris_data,iris_target):
        with tf.GradientTape() as tape:
            logits = model(_data)
            loss_value = tf.reduce_mean(tf.keras.losses.categorical_crossentropy(y_true=label,y_pred =logits))
            grads = tape.gradient(loss_value,model.trainable_variables)
            opt.apply_gradients(zip(grads,model.trainable_variables))
  1. tf.GradientTape() :梯度求解器(求导)
  2. logits:模型预测结果
  3. loss_value:误差值
  4. grads:计算误差的幅度
  5. opt.apply_gradients:根据误差幅度进行梯度更新
  6. trainable_variables:模型中可训练的变量

三、使用Keras函数式编程

  • 顺序模型自由度有较大影响:需要对输入数据进行重新计算时,顺序模型不适用。 
  • 函数式编程:只需要建立模型,导入输入和输出的“形式参数”即可。
  1. #1.输入端
  2. inputs= tf.keras.layers.Input(shape=(4,))
  3. #2.中间层
  4. x = tf.keras.layers.Dense(32,activation='relu')(inputs)
  5. x = tf.keras.layers.Dense(64,activation='relu')(x)
  6. #3.输出端:直接将计算的最后一个层座位输出端
  7. predictions= tf.keras.layers.Dense(3,activation='softmax')(x)
  8. model= tf.keras.Model(inputs=inputs,outputs = predictions)
1.Input函数 

 tf.keras.Input(

        shape=None,                       #形状元组 shape=(32,)---输入是32维向量

        batch_size=None,                #静态批量的大小--整数

        name=None,                        #自定图层名字(一般不要重复

        dtype=None,                        #数据类型(float32、float64...

        sparse=False,                      #布尔值False/True 是否创建稀疏占位符

        tensor=None...)                   #可选现有张量包裹到Input图层 True--不创建占位符张量

 2.用model自带save函数保存数据
  • 保存模型 
  1. #保存模型
  2. model.save('./saver/model2-2.h5')
  •  复用模型
  1. import numpy as np
  2. import tensorflow as tf
  3. from sklearn.datasets import load_iris
  4. data=load_iris()
  5. iris_target = data.target
  6. iris_data = np.float32(data.data)
  7. iris_target = np.float32(tf.keras.utils.to_categorical(iris_target,num_classes=3))
  8. new_model = tf.keras.models.load_model('./saver/model2-2.h5')
  9. new_prediction = new_model.predict(iris_data)
  10. print(tf.argmax(new_prediction,axis=-1))
  •  预测结果:

 

四、使用TensorFlow标准化编译

  • 使用fit函数和compile函数对数据进行载入和参数分析
  1. import numpy as np
  2. import tensorflow as tf
  3. from sklearn.datasets import load_iris
  4. data=load_iris()
  5. iris_target = data.target
  6. iris_data = np.float32(data.data)
  7. iris_target = np.float32(tf.keras.utils.to_categorical(iris_target,num_classes=3))
  8. #输入格式有改变 以(iris_data,iris_target)形式输入数据和标签
  9. train_data = tf.data.Dataset.from_tensor_slices((iris_data,iris_target)).batch(128)
  10. input_xs = tf.keras.layers.Input(shape=(4,),name="input_xs")
  11. out = tf.keras.layers.Dense(32,activation="relu",name="dense_1")(input_xs)
  12. out = tf.keras.layers.Dense(64,activation="relu",name="dense_2")(out)
  13. logits = tf.keras.layers.Dense(3,activation='softmax',name='predictions')(out)
  14. model = tf.keras.Model(inputs = input_xs,outputs = logits)
  15. opt = tf.optimizers.Adam(1e-3)
  16. model.compile(optimizer=tf.optimizers.Adam(1e-3),loss=tf.losses.categorical_crossentropy,metrics=['accuracy'])
  17. model.fit(train_data,epochs=500)
  18. score = model.evaluate(iris_data,iris_target)
  19. print("last score:",score)
1.数据输入形式的改变
#输入格式有改变 以(iris_data,iris_target)形式输入数据和标签
train_data = tf.data.Dataset.from_tensor_slices((iris_data,iris_target)).batch(128)
2.构建网络层级
  • input--Dense--Dense....
input_xs = tf.keras.layers.Input(shape=(4,),name="input_xs")
out = tf.keras.layers.Dense(32,activation="relu",name="dense_1")(input_xs)
out = tf.keras.layers.Dense(64,activation="relu",name="dense_2")(out)
logits = tf.keras.layers.Dense(3,activation='softmax',name='predictions')(out)
3.建立模型 Model
  • 仅传递输入和输出
  • tf.keras.Model( inputs =xxx,outputs =xxx )
model = tf.keras.Model(inputs = input_xs,outputs = logits)
4.编译模型 compile
  • 包含优化器optimizer、损失loss、评价指标metrics
model.compile(optimizer=tf.optimizers.Adam(1e-3),loss=tf.losses.categorical_crossentropy,metrics=['accuracy'])
5.训练模型 fit
  • 以给定的数量轮次来训练模型
  • 参数:x---输入、y--输出、batch_size--每次梯度更新的样本数(默认32)、epochs--迭代轮次
model.fit(train_data,epochs=500)

or

model.fit(x=iris_data,y=iris_target,batch_size=128,epochs=500)
6.模型评价 evaluate
score = model.evaluate(iris_data,iris_target)
print("last score:",score)

Epoch 1/500
2/2 [==============================] - 0s 499us/step - loss: 1.4749 - accuracy: 0.3333
Epoch 2/500
2/2 [==============================] - 0s 502us/step - loss: 1.3558 - accuracy: 0.4267

...

Epoch 498/500
2/2 [==============================] - 0s 0s/step - loss: 0.0908 - accuracy: 0.9667
Epoch 499/500
2/2 [==============================] - 0s 264us/step - loss: 0.0907 - accuracy: 0.9667
Epoch 500/500
2/2 [==============================] - 0s 495us/step - loss: 0.0905 - accuracy: 0.9667
5/5 [==============================] - 0s 444us/step - loss: 0.0902 - accuracy: 0.9667

last score: [0.09018253535032272, 0.9666666388511658]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/851966
推荐阅读
相关标签
  

闽ICP备14008679号