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 在训练不同的形状时,张肌收缩_Python_Tensorflow_Keras - Fatal编程技术网

Python 在训练不同的形状时,张肌收缩

Python 在训练不同的形状时,张肌收缩,python,tensorflow,keras,Python,Tensorflow,Keras,嗨,伙计们,我将讨论如何在训练时用自己定义的张量对象连接张量对象,我正在训练自动编码器模型 这是我的代码: def IFFT(sig, name=None): nol = tf.zeros([1,12],tf.complex64) pv = tf.fill([1,8],3+3j) pv = tf.cast(pv,dtype=tf.complex64) nol = tf.expand_dims(pv,axis=1) pv = tf.expand_dims(

嗨,伙计们,我将讨论如何在训练时用自己定义的张量对象连接张量对象,我正在训练自动编码器模型

这是我的代码:

def IFFT(sig, name=None):

    nol = tf.zeros([1,12],tf.complex64)
    pv = tf.fill([1,8],3+3j)
    pv = tf.cast(pv,dtype=tf.complex64)
    nol = tf.expand_dims(pv,axis=1)
    pv = tf.expand_dims(pv,axis=1)
    return Lambda(lambda x : tf.ifft(tf.concat([nol,x,pv,nol],axis=-1)), name=name, output_shape=(1,64))(sig)

当我运行代码时,我有一个错误

InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,1,12] vs. shape[1] = [64,1,32]
     [[{{node 32-IFFT/concat}}]]
     [[{{node loss/add}}]]

任何人都可以帮助我吗?

处理批处理的一种方法是创建一个名为BATCH\u SIZE的变量,然后手动输入数据的所需批大小。如果您执行的自定义操作中没有批量大小可能不适合您,或者您需要对数据进行更多控制,则通常会执行此操作

我复制了您的代码,并假设了X变量的形状(1,32),因为它没有包含在您的代码片段中

import tensorflow as tf
print('TensorFlow Version : {}'.format(tf.__version__)) # Using TensorFlow 2.1.0

BATCH_SIZE = 64

nol = tf.zeros([BATCH_SIZE,1,12],tf.complex64)
pv = tf.fill([BATCH_SIZE,1,8],3+3j)
pv = tf.cast(pv,dtype=tf.complex64)

#Assuming your data X based on your error
x = tf.zeros([BATCH_SIZE,1,32],tf.complex64)

# Verification 1
tf.signal.ifft(tf.concat([nol,x,pv,nol],axis=-1)) 

# Verification 2
tf.keras.layers.Lambda(lambda x : tf.signal.ifft(tf.concat([nol,x,pv,nol],axis=-1)), output_shape=(1,64))(x) 

在处理批处理数据时,这是一种常见的方法,因为在整个代码中,更容易被引用,并且更加一致


修改代码:


处理批处理的一种方法是创建一个名为BATCH\u SIZE的变量,并手动输入数据的所需批大小。如果您执行的自定义操作中没有批量大小可能不适合您,或者您需要对数据进行更多控制,则通常会执行此操作

我复制了您的代码,并假设了X变量的形状(1,32),因为它没有包含在您的代码片段中

import tensorflow as tf
print('TensorFlow Version : {}'.format(tf.__version__)) # Using TensorFlow 2.1.0

BATCH_SIZE = 64

nol = tf.zeros([BATCH_SIZE,1,12],tf.complex64)
pv = tf.fill([BATCH_SIZE,1,8],3+3j)
pv = tf.cast(pv,dtype=tf.complex64)

#Assuming your data X based on your error
x = tf.zeros([BATCH_SIZE,1,32],tf.complex64)

# Verification 1
tf.signal.ifft(tf.concat([nol,x,pv,nol],axis=-1)) 

# Verification 2
tf.keras.layers.Lambda(lambda x : tf.signal.ifft(tf.concat([nol,x,pv,nol],axis=-1)), output_shape=(1,64))(x) 

在处理批处理数据时,这是一种常见的方法,因为在整个代码中,更容易被引用,并且更加一致


修改代码:


正如错误所说,两个数组的前二维数字必须相同。您需要使维度0匹配(目前它们是1和64),因为我的批处理大小也是64。但是如果我访问sig.shape()它会说[?,1,32]。我怎么知道“?”的值呢?正如错误所说,两个数组的前二维数必须相同。您需要使维度0匹配(目前它们是1和64),因为我的批处理大小也是64。但是如果我访问sig.shape()它会说[?,1,32]。我怎么知道“?”的值呢?谢谢,它对我有用,只需要稍微调整一下我的数据集长度谢谢,它对我有用,只需要稍微调整一下我的数据集长度