TypeError: Input ‘y‘ of ‘Sub‘ Op has type int32 that does not match type float32 of argument ‘x‘.
最新推荐文章于 2022-06-07 11:15:45 发布
一枚研究僧
最新推荐文章于 2022-06-07 11:15:45 发布
阅读量3.6k
这是我在用keras做神经网络自定义损失函数loss时遇到的问题,出现问题的代码如下:
import tensorflow as tf
from sklearn import datasets
import numpy as np
from keras import backend as K
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
def my_loss(y_true, y_pred):
return K.mean((y_pred - y_true), axis=-1)
model.compile(optimizer='adam',
loss=my_loss,
metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
print(model.predict(x_train)[0])
model.summary()
运行结果如下:
解决方案:
方案一:
出现这个问题可能是因为tensorflow的版本为2.0及以上导致的,降低tensorflow的版本即可,在终端敲入:
pip install tensorflow==1.15
方案二:
根据报错的内容可知,该错误是y_pred - y_true的数据类型不同导致的,y_pred的类型是float32,而y_true的类型是int32。对于上述代码来说,y_true是原先鸢尾花的分类数据,包含1、2、3,都是int32型的数据,因此只要将y_true转化为float32型的数据即可,具体操作时将下列代码片:
def my_loss(y_true, y_pred):
return K.mean((y_pred - y_true), axis=-1)
def my_loss(y_true, y_pred):
y_true = tf.cast(y_true, dtype=tf.float32)
return K.mean((y_pred - y_true), axis=-1)
再运行可以看到不再报错:
TypeError: Input ‘y‘ of ‘Sub‘ Op has type int32 that does not match type float32 of argument ‘x‘.
这是我在用keras做神经网络自定义损失函数loss时遇到的问题,代码如下:import tensorflow as tffrom sklearn import datasetsimport numpy as npfrom keras import backend as Kx_train = datasets.load_iris().datay_train = datasets.load_iris().targetnp.random.seed(116)np.random.shuffl
Python 中的列表(大小可变的数组)和字典(哈希表)就是内建于语言本身的。在核心语言中提供这些重要的构建单元,可以鼓励人们使用它们, 缩短开发时间与代码量,产生出可读性更好的代码。C不提供, c++功能不够简洁。
面向对象,
可升级:Python 提倡简洁的代码设计、高级的数据结构和模块化的组件,确保灵活性、
一致性并缩短必要的调试时间
扩展性:兼容扩展c
在运行unet网络的时候报出如下错误:
ValueError: Tensor conversion requested d
type
int
32
for Tensor with d
type
int
64: <tf.Tensor 'loss/activation_1_loss/lossFunc/ArgMax:0' shape=(?, ?) d
type
=
int
64>
TypeError
:
Input
'y' of 'Equal'
Op
has
type
int
64 that does not mat
TypeError
:
Input
'b' of 'MatMul'
Op
has
type
float
32
that does not
match
type
int
32
of
argument
'a'.
loss = tf.reduce_mean(
tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,
num_sampled, vocabulary_size))
TypeError
:
Input
'b'
最近我在github上下载了别人的
深度学习
算法,但是在我的tf2环境中出现了如上错误。
我的环境:
python3.6 +
tensorflow
2.3.0 + keras 2.4.3
实际中采用了
tensorflow
.keras,不需要额外安装keras
我尝试了下面两种方法,均可以解决:
使x与y数据类型一致
Ⅰ 倒回版本
python3.6 +
tensorflow
1.15.0 + keras 2.4.0
该环境下能够正常运行,但是与我CUDA版本(10.1)不匹配
# 创建两个常量节点
node1 = tf.constant([2,5], d
type
=tf.
int
32
)
node2 = tf.constant([1,2], d
type
=tf.
float
32
)
#创...
这是在做用
tensorflow
读取csv文件中数据时,设置默认值时与数据源中的数据格式不匹配,即,上面的意思是,csv文件中的数据类型是字符型的,而我们设置默认值时设置的时
int
32
型的不匹配
转载于:https://www.cnblogs.com/bluesl/p/9215789.html...
Tensorflow
2 更新之后,越来越多的工作要慢慢迁移到新版本中,但是我个人认为 tf 版本之间的兼容性有时候真的很让人无语。
当找不到对应方法或调用时,大部分可以通过 .compat.v1 来解决,这就不说了;
最难受的是,同一个函数,名字完全一致,在 tf1 和 tf2 中调用方法都一样,可是函数内的具体实现却并不同。
如下面 in_t
op
_k :
t
op
_k_
op
= tf.nn.in_t
op
_k(logits, label_holder, 1)
在两个版本中都是通过 tf.nn.in_t
op
_k
出错代码行
model.fit(x_train, y_train, batch_size=
32
, epochs=50, validation_data=(x_test, y_test), validation_freq=1)
仔细研究,发现问题是在我数据集中。
我的数据集采用的都是
int
型表示灰度值,没有在数值后加.,而
神经网络
中需要输入的数据类型为
float
32
,所以我们要用as
type
(np.
float
32
)更改数据集数据类型。
出错代码:
all_
input
s = iris_data[['1', '
TypeError
:
Input
'y' of '
Sub
'
Op
has
type
int
32
that does not
match
type
float
32
of
argument
'x'.
TypeError
:
Input
'split_dim' of 'Split'
Op
has
type
float
32
that does not
match
expected
type
of
int
32
.
1.
TypeError
:
Input
'split_dim' of 'Split'
Op
has
type
float
32
that does not
match
expected
type
of
int
32
.
TensorFlow
版本不同,函数接口修改导致的问题。
API r1.3 - tf.
显示,
TypeError
:
Input
‘b’ of ‘MatMul’
Op
has
type
float
32
that does not
match
type
float
64 of
argument
'a,这是由于两个相乘矩阵类型不匹配,调试一下发现x矩阵为tf.
float
64,W矩阵为tf.
float
32
,改类型用tf.cast()函数,修改如下:
y = tf.matmul(tf.cast(...
Abstract
The superior performance of Deformable Convolutional Networks arises from its ability to adapt to the geometric variations of objects.
可变形卷积网络的优越性能源于其对目标几何变化的适应能力
Through an examination of...