# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: TensorFlow-2.1.0
#     language: python
#     name: tensorflow-2.1.0
# ---

# +
# 导入相关包
# 神经网络构造
import tensorflow as tf
from tensorflow.keras import layers 
from tensorflow import keras

# 画图
import matplotlib.pyplot as plt  

# 数据计算
import numpy as np    

# 鸢尾花数据集
from sklearn import datasets 
# -

iris = datasets.load_iris() # 从datasets中载入鸢尾花分类数据
y_train = iris.target       # 鸢尾花分类的目标数据
x_train = iris.data         # 鸢尾花分类的特征数据

# +
print(y_train.shape)        # 查看目标数据的维度
print(x_train.shape)        # 查看训练数据的维度

print(y_train[1])           # 查看样本数据形式
print(x_train[1])           # 查看样本数据形式 

print(len(set(list(y_train)))) # 查看有多少类别
print(set(list(y_train)))      # 查看有哪些类别

# +
#动态分配显存
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)
    
model = keras.Sequential(
[
    layers.Flatten(input_shape=[4]),        # 展开层，将输入展开成shape为[4]的tensor
    layers.Dense(3, activation='softmax')   # 全连接层，输出为3维，使用softmax作为激活函数；表示输入属于属于三类的概率
])
# -

# 模型训练方法配置
model.compile(optimizer='adam',                      # 使用Adam算法进行优化
             loss='sparse_categorical_crossentropy', # 由于是多分类问题，使用交叉熵损失函数
             metrics=['accuracy'])                   # 配置准确率作为测量指标


model.summary()   # 查看模型的细节，展示每一层的详细信息

# +
# 输入参数：
# x_train：输入特征数据集
# y_train：输入的目标数据集
# batch_size：每次更新参数使用的样本数量大小
# epochs：对全量样本的训练轮数
# validation_split：在训练过程中使用的验证样本占所有数据集（x_train，y_train）的比例，
# 设置验证数据可帮助直观查看模型是欠拟合过拟合、

# 输出：
# 模型配置model.compile 中metrics包含的评估指标在每次训练的值， 此处metrics=['accuracy']
# 由于设置了validation_split，因此也包含评估指标在验证数据上的值
history = model.fit(x_train, y_train, batch_size=20, epochs=500, validation_split=0.1)
# -

# 模型训练结果打印
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.legend(['training_acc', 'valivation_acc'], loc='upper left')
plt.show()

# 模型训练结果打印
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.legend(['training_loss', 'valivation_loss'], loc='upper left')
plt.show

# 模型预测
result = model.predict([[5.1,3.3,1.7,0.5]])  # 使用构造数据测试
print(result)



StarcoderdataJupyterScriptsDedupFiltered