基于tensorflow的简单神经网络搭建

该网络中只有一层线形层加一个激活函数,先用训练集训练再用测试集测试,训练60个epoch要比40个epoch效果更好
代码来源:点我
得到下面的训练结果(60个epoch)
在这里插入图片描述
如果是40个epoch的话:
在这里插入图片描述

from sklearn import datasets
import numpy as np
import tensorflow as tf
import seaborn as sns
x_data=datasets.load_iris().data
y_data=datasets.load_iris().target

np.random.seed(116)
np.random.shuffle(x_data)
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)

x_train=x_data[:-40]
y_train=y_data[:-40]
x_test=x_data[-40:]
y_test=y_data[-40:]

train_db=tf.data.Dataset.from_tensor_slices((x_train,y_train)).batch(32)
test_db=tf.data.Dataset.from_tensor_slices((x_test,y_test)).batch(32)

w=tf.Variable(tf.random.truncated_normal([4,3],stddev=0.1,seed=1))
b=tf.Variable(tf.random.truncated_normal([3],stddev=0.1,seed=1))
print(type(w))
epoch=60
lr=0.2
loss_rec=[]
acc=[]
for epoch in range(epoch):
    loss_all=0
    for step,(x_train,y_train) in enumerate(train_db):
      
        x_train=tf.cast(x_train,tf.float32)#cast不是作用函数
        w=tf.cast(w,tf.float32)
        b=tf.cast(b,tf.float32)
        
       # print(w.dtype,b.dtype)
        with tf.GradientTape() as tape:
            tape.watch([w,b])
            y=tf.matmul(x_train,w)+b
            y=tf.nn.softmax(y)
            y_=tf.one_hot(y_train,depth=3,dtype=tf.float32)
            loss=tf.reduce_mean(tf.square(y_-y))
        grads=tape.gradient(loss,[w,b])
        w.assign_sub(grads[0]*lr)
        b.assign_sub(grads[1]*lr)
       # print(grads)
        loss_all+=loss.numpy()
    loss_rec.append(loss_all/4)

#print(loss_rec)
#下面进行预测
    total_cor=0
    total_num=0
    for step,(x_test,y_test) in enumerate(test_db):
        x_test=tf.cast(x_test,tf.float32)
        y=tf.matmul(x_test,w)+b
        y=tf.nn.softmax(y)
        pre=tf.argmax(y,axis=1)
        pre=tf.cast(pre,dtype=y_test.dtype)
        correct=tf.cast(tf.equal(pre,y_test),dtype=tf.int32)
        correct=tf.reduce_sum(correct)
        total_cor+=correct.numpy()
        total_num+=y_test.shape[0]
    tmp=total_cor/total_num
    acc.append(tmp)
    print(total_cor,total_num)
# data1=pd.DataFrame(loss_rec)
# #data1.loc[:,'pl']
# sns.set_style("darkgrid")
# sns.lineplot(data=data1,ci=1 )

data1=pd.DataFrame(acc)
#data1.loc[:,'pl']
sns.lineplot(data=data1,ci=1 )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值