Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我有形状(32256256,3)中的输入,我想创建一个自定义损失函数,复制Keras中的以下等式_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python 如果我有形状(32256256,3)中的输入,我想创建一个自定义损失函数,复制Keras中的以下等式

Python 如果我有形状(32256256,3)中的输入,我想创建一个自定义损失函数,复制Keras中的以下等式,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,在keras中为y_pred和y_形状损失(32256256,3)创建自定义损失函数,其中32是批次大小,3是尺寸256x256图像的通道数和损失方程: 本文给出了曲面法线的损失函数: 我没有得到任何错误,但结果不是预期的。有没有其他更好的方法来编写代码?任何帮助都将不胜感激。提前谢谢你 您正在使用numpy获得张量的点积。这里的y\u true\u flat和y\u pred\u flat是张量。您应该使用tensorflow.tensordot方法或tensorflow.keras.bac

在keras中为y_pred和y_形状损失(32256256,3)创建自定义损失函数,其中32是批次大小,3是尺寸256x256图像的通道数和损失方程:

本文给出了曲面法线的损失函数:


我没有得到任何错误,但结果不是预期的。有没有其他更好的方法来编写代码?任何帮助都将不胜感激。提前谢谢你

您正在使用numpy获得张量的点积。这里的
y\u true\u flat
y\u pred\u flat
是张量。您应该使用
tensorflow.tensordot
方法或
tensorflow.keras.backend.dot
方法来获得两个张量的乘积。由于这些张量是向量,
tensorflow.matmul
也可以工作

def normal_loss_1(y_true,y_pred):
dim=tf.reduce\u prod(tf.shape(y\u true)[1:]
y_-true_-flatten=tf.重塑(y_-true,[-1,dim])
y_pred_flatten=tf.重塑(y_pred,[-1,dim])
d=tf.tensordot(y_pred_flatten,y_true_flatten,1)
y_sum=tf.减少_sum(d,1)
n_像素=256*256
正常输出=y和/n像素
正常输出=tf.减少平均值(正常输出)
返回-正常输出
编辑
K.flatte
将张量(
y\u true
y\u pred
)转换为向量,批次维度将消失。这意味着您无法对该批次的损失进行平均

您正在使用numpy获得张量的点积。这里的
y\u true\u flat
y\u pred\u flat
是张量。您应该使用
tensorflow.tensordot
方法或
tensorflow.keras.backend.dot
方法来获得两个张量的乘积。由于这些张量是向量,
tensorflow.matmul
也可以工作

def normal_loss_1(y_true,y_pred):
dim=tf.reduce\u prod(tf.shape(y\u true)[1:]
y_-true_-flatten=tf.重塑(y_-true,[-1,dim])
y_pred_flatten=tf.重塑(y_pred,[-1,dim])
d=tf.tensordot(y_pred_flatten,y_true_flatten,1)
y_sum=tf.减少_sum(d,1)
n_像素=256*256
正常输出=y和/n像素
正常输出=tf.减少平均值(正常输出)
返回-正常输出
编辑
K.flatte
将张量(
y\u true
y\u pred
)转换为向量,批次维度将消失。这意味着您无法对该批次的损失进行平均

感谢您的帮助,但我在第行中得到以下错误:y_sum=tf。reduce_sum(d,1)ValueError:对于具有0维的输入,reduce维度1无效。对于输入形状为[]、[]且具有计算输入张量的“丢失/激活\丢失/求和”(op:“求和”):输入[1]=。您不必展平
y\u true
y\u pred
。我已经删除了线路。很抱歉,这也没有解决问题。我得到了以下错误:文件“our_train_normal.py”,第286行,在validation_data=(X_test,y_test),文件“/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site packages/tensorflow/python/keras/engine/training.py”,第880行,在fit validation_steps=validation_steps)文件中“/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site packages/tensorflow/python/keras/engine/training_arrays.py”,第329行,在model_迭代批处理中,out=f(ins_批处理)感谢您的帮助,但我在第行中得到以下错误:y_sum=tf.reduce_sum(d,1)ValueError:维度为0的输入的缩减维度1无效。对于输入形状为[]、[]和计算输入张量的“丢失/激活\丢失/求和”(op:“求和”):输入[1]=.您不必展平
y\u true
y\u pred
。我已经删除了行。很抱歉,这也没有解决问题。我收到以下错误:文件“our\u train\u normal.py”,第286行,在验证中\u data=(X\u测试,y\u测试),文件“/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py”,第880行,in-fit-validation\u steps=validation\u steps)文件“/home/ivlab/anaconda2/envs/tuto/lib/python3.7/site-packages/tensorflow/python/keras/engine/training\u arrays.py”,第329行,在模型迭代批处理中
def normal_loss_1 (y_true, y_pred):    
    y_true_flat = K.flatten(y_true)
    y_pred_flat = K.flatten(y_pred)
    #d = y_pred_flat * y_true_flat
    d = np.dot(y_pred_flat,y_true_flat)
    y_sum = K.sum(d)
    n_pixels = 256 * 256
    normal_output = y_sum/n_pixels
    normal_output = tf.reduce_mean(normal_output)
    return -normal_output