相关文章推荐
慈祥的黄豆  ·  keras可视化pydot ...·  2 周前    · 
害羞的芹菜  ·  Jenkins pipeline ...·  1 年前    · 
星星上的企鹅  ·  pl/sql 存储过程 - ...·  1 年前    · 

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...
TypeError : Input ‘b’ of ‘MatMul’ Op has type float 32 that does not match type float 64 of argument 'a 在使用tf.matmul()时提示两个参量一个为 float 32 型,另外一个为 float 64型 解决方法:转换成同类型。 tf.cast( input s,tf. float 32 )#转换成 float 32
在使用负采样函数的时候出现了该错误,错误代码: tf.nn.sampled_softmax_loss(softmax_weights, softmax_biases,                tf.reduce_sum(embeds, 1),                 train_labels,                 num_sampled, vocabu...
TypeError: Input ‘y‘ of ‘Sub‘ Op has type int32 that does not match type float32 of argument ‘x‘. ImportError: Module “drf_yasg.generators“ does not define a “OpenAPISchemaGenerator“ attribute/class ImportError: Module “drf_yasg.generators“ does not define a “OpenAPISchemaGenerator“ attribute/class Fatty_sec: 好评,我的doccano也遇到类似的问题,现在正常运作中。不过我环境里的field.py并不用把line 406进行修改,因为line 405写的就是BooleanField,只需注释406行即可。不太懂后端,这是doccano的bug还是django的bug,或者是版本适配的问题? Python创建自己的聊天机器人 My_progress1: TypeError: Input ‘y‘ of ‘Sub‘ Op has type int32 that does not match type float32 of argument ‘x‘. My_progress1: 学习到了,谢谢博主 TypeError: Input ‘y‘ of ‘Sub‘ Op has type int32 that does not match type float32 of argument ‘x‘. 韭菜茁壮成长: 解决了 用的方法二 谢谢博主 表情包 ImportError: Module “drf_yasg.generators“ does not define a “OpenAPISchemaGenerator“ attribute/class Python创建自己的聊天机器人