从sklearn包datasets读入数据集,语法为:
from sklearn.datasets import load_iris
x_data=datasets.load_iris().data #返回iris数据集所有输入特征
y_data=datasets.load_iris().target #返回iris数据集所有标签
将数据变成表格形式
需要引:
import pandas as pd
x=DataFrame(x,columns=['','','','']) #引号里内容为其标签
pd.set_option('display.unicode.east_asian_width',Ture)
如需插入列标签
x['列标签名称']=y #数据为y
从sklearn包datasets读入数据集:
form sklearn.datasets import datasets
x_data=datasets.load_iris().data #返回iris数据集所有输入特征
y_data=datasets.load_iris().target #返回iris数据集所有标签
np.random.seed(116)#使用相同的seed,使输入特征/标签一一对应
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)
x_train=x_data[:-30]
y_train=y_data[:-30]
x_test=x_data[-30:]
x_test=x_data[-30:]
train_dbtf.dataDataset.form_tensor_slices((x_train,y_train)).batch(32)
train_dbtf.dataDataset.form_tensor_slices((x_test,y_test)).batch(32)
w1=tf.Variable(tf.random.truncated_normal)([4,3],stddev=0.1,seed=1) #指输入特征为四个,输出节点等于分类数为三,参数w1为四行三列的张量
b1=tf.Variable(tf.random.truncated_normal[3],stddev=0.1,seed=1)#b1必须与w1 的输出节点数相同
for epoch in range(epoch): #数据集级别迭代
for step,(x_train,y_train) in enumerate(train_db): #batch级别迭代
with tf.GradientTape() as tape: #记录梯度信息
前向传播过程计算y
计算总loss
grads=tape.gradient(loss,[w1,b1])
w1.assign_sub(lr*grads[0])
b1.assign_sub(lr*grads[1])
print("Epoch{}.loss:{}".format(epoch,loss_all/4))
for x_test,y_test in test_db:
y=tf.matmul(h,w)+b # y为预测结果
y=tf.nn.somax(y) # y符合概率分布
pred=tf.argmax(y,axis=1) # 返回y中最大值的索引,即预测的分类
pred=tf.cast(pred,dtype=y_test.dtype) # 调整数据类型与标签一致
correct=tf.cast(tf.equal(pred,y_test),dtype=tf.int32)
correct=tf.reduce_sum(correct) # 将所有batchdecorrect数加起来
total_correct+=int(correct) # 将所有batch中的correct数加起来
total_number+=x_test.shape[0]
acc=total_correct/total_number
print("test_acc:",acc)
plt.title('Acc Curve') # 图片标题
plt.xlabel('Epoch') # x轴名称
plt.ylabel('Acc') # y轴名称
plt.plot(test_acc,label="$Accuracys$") # 逐点画出test_acc值并连线
plt.legend()
plt.show()