鱼C论坛

 找回密码
 立即注册
查看: 1201|回复: 3

python tensorflow 维度报错

[复制链接]
发表于 2020-4-27 15:26:56 | 显示全部楼层 |阅读模式
30鱼币
核心代码和教学视频一样的  不知道哪错了  弄了一天了  奔溃  希望高手们发表一下见解,帮助一下我!!!
我用的是tensorflow2.0  数据加载进来也没问题  下面是报错截图:

报错图

报错图


维度报错我也验证了  没啥毛病:
1587912984483.jpg 1587913019294.jpg
再下面是代码:
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
mnist=tf.keras.datasets.mnist
(train_x,train_y),(text_x,text_y)=mnist.load_data()

look_photo_x=text_x[:]   #备用验证
look_photo_y=text_y[:]

#定义训练参数
lun_shu=20  #训练轮数
yang_benshu=50  #单次训练样本数
xue_xilv=0.001   #学习率
cunt=0 #记录学习轮数
loss_train_save=[] #保存训练集损失函数值
acc_train_save=[]  #保存训练集Acc值

#图像拉直.....变为一维数组

print(train_x[0].shape)  #数据验证

train_x=train_x.reshape(-1,784)
text_x=text_x.reshape(-1,784)

print(train_x[0].shape)#数据验证

#特征数据归一化代码块
train_x=tf.cast(train_x/255.0,tf.float32)
text_x=tf.cast(text_x/255.0,tf.float32)

#标签数据变成独热码形式
train_y=tf.one_hot(train_y,depth=10)
text_y=tf.one_hot(text_y,depth=10)

#模型变量的定义
Input_Dim=784
H1_NN=64
W1=tf.Variable(tf.random.normal( [Input_Dim , H1_NN], mean=0.0,stddev=1.0,dtype=tf.float32))
B1=tf.Variable(tf.zeros([H1_NN]), dtype=tf.float32)
               
Output_Dim=10
W2=tf.Variable(tf.random.normal( [H1_NN , Output_Dim], mean=0.0,stddev=1.0,dtype=tf.float32))
B2=tf.Variable(tf.zeros( [Output_Dim] ) , dtype=tf.float32)
               
W=[W1,W2]
B=[B1,B2]

#模型的构建
def model(x,w,b):
    x=tf.matmul(x,w[0]) + b[0]
    x=tf.nn.relu(x)
    x=tf.matmul(x,w[1]) + b[1]
    pred=tf.nn.softmax(x)
    return pred

#定义损失函数
def loss(x,y,w,b):
    pred=model(x,w,b)  #计算预测值和标签值的差异
    loss_=tf.keras.losses.categorical_crossentropy(y_true=y,y_pred=pred)
    return tf.reduce_mean(loss_)  #求均值,得出均方差

#梯度计算函数
def grad(x,y,w,b):
    with tf.GradientTape() as tape:
        loss_=loss(x,y,w,b)
    return tape.gradient(loss_,[w,b])  #返回梯度向量

#Adam优化器
optimizer=tf.keras.optimizers.Adam(learning_rate=xue_xilv)

#定义准确率
def accuracy(x,y,w,b):
    pred=model(x,w,b)
    one_or_zero=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
    #准确率,将布尔型转换为浮点型并计算均值
    return tf.reduce_mean(tf.cast(one_or_zero,tf.float32))

#直线图封装函数
def zhi_xian_tu(x_,y_):
    plt.rcParams['font.sans-serif']='SimHei' #设置字体为黑体
    
    plt.plot(x_,label='学习率',color='r')   #创建直线图
    plt.plot(y_,label='损失率',color='b')
    
    plt.ylim(0,1)      #设置纵坐标长度为1
    
    plt.xlabel('百分比',fontsize=12)     #显示图例
    plt.xlabel('学习次数',fontsize=12)
    
    plt.title('手写数字识别学习率与损失率直观图',fontsize=16)  #设置标题
    
    plt.legend()  #显示图例
    plt.show()  #显示完整直线图

total_step=int(len(train_x)/yang_benshu)

for i in range(lun_shu):
    cunt+=1
    for m in range(total_step):
        xs=train_x[m*yang_benshu:(m+1)*yang_benshu]
        ys=train_y[m*yang_benshu:(m+1)*yang_benshu]
        
        grads=grad(xs,ys,W,B)#计算梯度
        optimizer.apply_gradients(zip(grads,W+B)) #优化器根据梯度自动调整梯度
        
    loss_train=loss(train_x,train_y,W,B).numpy()  #计算当前轮训练损失率
    acc_train=accuracy(train_x,train_y,W,B).numpy()  #计算当前识别率
    
    loss_train_save.append(loss_train)
    acc_train_save.append(acc_train)
    
    print('正在学习第:%d轮  损失率:%4f  识别正确率:%4f' % (cunt,loss_train,acc_train))
    
zhi_xian_tu(acc_train_save,loss_train_save)    #打印直线图
    

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-27 15:39:30 | 显示全部楼层
{WZI1`B%1PFBP9RK0R]1]~2.png   如果把  优化器根据梯度自动调整梯度  注释掉就可以运行 但是就学习率就上不去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-27 16:59:09 | 显示全部楼层
这种问题还是去CDSN问,那边专业的多一些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-27 17:09:58 | 显示全部楼层
都在几处发帖了  但是还没在CDSN发过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 22:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表