接触了前面的序列模型,相信只要得到了数据集,然后利用tensorflow
的序列模型来建立神经网络就可以很容易解决这个问题,那么,先来获取到数据集。
数据集
从sklearn
中直接使用,即:
from sklearn.datasets import load_iris
x_data = load_iris().data # 特征,【花萼长度,花萼宽度,花瓣长度,花瓣宽度】
y_data = load_iris().target # 分类
不妨简单看下特征数据和分类数据的形状:
训练
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4, input_shape=(4,), activation='relu'))
model.add(tf.keras.layers.Dense(3, input_shape=(4,), activation='softmax'))
model.compile(
optimizer="adam",
loss="sparse_categorical_crossentropy", # 分类的结果是数字编码的结果,用该交叉熵
metrics=['accuracy']
)
model.fit(x_data, y_data, epochs=100)
由于神经网络随机初始化参数,而我这里的网络层数比较浅,训练轮次比较少,就会导致几乎每次训练的效果都是不同的,我随机取了一次,如:
然后,还是粗暴的使用原数据来进行预测,虽然这样不好,但懒得划分训练集和测试集了。
test_y_data = model.predict(x_data) # 得到的是numpy的数据类型容器
tensor_y_data = tf.convert_to_tensor(test_y_data, tf.float32) # 将numpy类型的数据转换成tensor张量
max_index_y_data = tf.argmax(tensor_y_data, axis=1) # 按行求每个张量的最大值的索引