tf.matmul函数不识别计算错误的原因

这篇博客探讨了在使用tf.matmul进行矩阵运算时,为何不同数据类型(如numpy数组和浮点32类型)不被识别。作者通过实例说明了强制类型转换np.arange数据到tf.float32的原因,并揭示了全零向量输出的秘密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tf.matmul无法识别不同dtype类型的相乘,需要相同数据类型,比如float32类型。

比如

a=np.arange(16).reshape(1,16)
b=tf.cast(a,tf.float32)
print(tf.matmul(a,b.T)
'''结果输出为全零向量'''
在手写数字识别中,train函数中前向传播和损失计算的代码如下: ```python # 定义前向传播函数 def forward(x, weights, biases): # 第一层卷积层 conv1 = tf.nn.conv2d(x, weights['wc1'], strides=[1, 1, 1, 1], padding='SAME') conv1 = tf.nn.bias_add(conv1, biases['bc1']) conv1 = tf.nn.relu(conv1) # 第一层池化层 pool1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') # 第二层卷积层 conv2 = tf.nn.conv2d(pool1, weights['wc2'], strides=[1, 1, 1, 1], padding='SAME') conv2 = tf.nn.bias_add(conv2, biases['bc2']) conv2 = tf.nn.relu(conv2) # 第二层池化层 pool2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') # 将池化层的输出转换为全连接层的输入格式 fc1 = tf.reshape(pool2, [-1, weights['wd1'].get_shape().as_list()[0]]) # 第一层全连接层 fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1']) fc1 = tf.nn.relu(fc1) # 第二层全连接层 fc2 = tf.add(tf.matmul(fc1, weights['wd2']), biases['bd2']) fc2 = tf.nn.relu(fc2) # 输出层 out = tf.add(tf.matmul(fc2, weights['out']), biases['out']) return out # 定义损失计算函数 def loss(logits, labels): cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=labels) loss = tf.reduce_mean(cross_entropy) return loss ``` 其中,前向传播函数`forward`中,通过卷积层、池化层和全连接层逐步构建神经网络,并最终得到输出层的结果。损失计算函数`loss`中,使用交叉熵作为损失函数,计算预测值与真实值之间的差距。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值