Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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 带张量流的CRNN变长输入_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python 带张量流的CRNN变长输入

Python 带张量流的CRNN变长输入,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我将tensorflow 2.x(2.2.0-dev20200228)与tf.keras一起使用。我最初的问题是,Conv2d层不支持掩蔽,这就是为什么我正在寻找一种解决方法,用于可变长度输入的培训 因此,我最终希望使用input\u time\u size=None。据我所知,为此我必须使用tf.shape。然而,当我这样做时,我会得到一个错误(见下文),即使使用固定的输入\u time\u size=20。改用model.output.shape工作。欢迎您提供任何建议 注意,为了简单起见,

我将tensorflow 2.x(2.2.0-dev20200228)与tf.keras一起使用。我最初的问题是,Conv2d层不支持掩蔽,这就是为什么我正在寻找一种解决方法,用于可变长度输入的培训

因此,我最终希望使用
input\u time\u size=None
。据我所知,为此我必须使用
tf.shape
。然而,当我这样做时,我会得到一个错误(见下文),即使使用固定的
输入\u time\u size=20
。改用
model.output.shape
工作。欢迎您提供任何建议

注意,为了简单起见,代码提供了一个精简的网络

将tensorflow导入为tf
num_filters=1
输入时间大小=20
输入频率大小=10
model=tf.keras.Sequential()
添加(tf.keras.layers.Input(shape=(Input\u time\u size,Input\u frequency\u size,1)))
add(tf.keras.layers.Conv2D(filters=num\u filters,kernel\u size=(10,4),strips=[2,1]))
conv_output_height=tf.shape(model.output)[1]
conv_output_width=tf.shape(model.output)[2]
#这是可行的,但希望使用input\u time\u size=None
#conv_output_height=model.output.shape[1]
#conv_output_width=model.output.shape[2]
model.add(tf.keras.layers.reforme(目标形状=(conv_输出高度,conv_输出宽度*num_过滤器)))
add(tf.keras.layers.RNN(cell=tf.keras.layers.GRUCell(units=1),stateful=False))
添加模型(tf.keras.layers.Dense(单位=1))
model.compile()
回溯:

回溯(最近一次呼叫最后一次):
文件“test.py”,第23行,在
add(tf.keras.layers.RNN(cell=tf.keras.layers.GRUCell(units=1),stateful=False))
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/training/tracking/base.py”,第456行,在方法包装中
结果=方法(自身、*args、**kwargs)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/sequential.py”,第213行,添加
输出张量=层(自输出[0])
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/layers/recurrent.py”,第652行,在调用中__
返回super(RNN,self).\u调用\u(输入,**kwargs)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/base\u layer.py”,第896行,在调用中__
自我构建(输入)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/base\u layer.py”,第2403行,在构建中
self.build(输入形状)#pylint:disable=不可调用
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/layers/recurrent.py”,第571行,内部版本
self.cell.build(步骤\输入\形状)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/utils/tf_utils.py”,第315行,在包装器中
输出形状=fn(实例,输入形状)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/layers/recurrent.py”,第1747行,内部版本
缓存\u设备=默认的\u缓存\u设备)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/base_layer.py”,第576行,在add_weight中
缓存\u设备=缓存\u设备)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/training/tracking/base.py”,第743行,在“添加变量”和“自定义”getter中
**kwargs_用于(获取者)
make_变量中的文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/base_layer_utils.py”,第141行
形状=可变形状(如果可变形状,则为无)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/variables.py”,第259行,在调用__
返回cls.\u变量\u v1\u调用(*args,**kwargs)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/variables.py”,第220行,在变量调用中
形状=形状)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/variables.py”,第198行,在
上一个\u getter=lambda**kwargs:默认\u变量\u创建者(无,**kwargs)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/variable\u scope.py”,第2598行,默认为变量
形状=形状)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/variables.py”,第263行,在调用__
返回super(VariableMetaclass,cls)。\调用(*args,**kwargs)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/resource_variable_ops.py”,第1434行,在u init中__
分发策略=分发策略)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/resource_variable_ops.py”,第1567行,在参数的_init_中
初始值()如果初始值来自于初始值,
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/base\u layer\u utils.py”,第121行,在
init_val=lambda:初始值设定项(shape,dtype=dtype)
文件“/home/test/.local/lib/python3.6/site packages/tensorflow/python/ops/init_ops_v2.py”,第548行,在调用中__
比例/=最大值(1.,(扇入+扇出)/2.)
TypeError:不支持+:“NoneType”和“int”的操作数类型

时间步维度可以是动态的,但在本例中,
转换输出宽度必须是固定的,即以下工作:

conv_output_height=tf.shape(model.output)[1]
conv_output_width=model.output.shape[2]
然而,培训失败,出现了一些与急切执行相关的错误。我会发布一个解决方案,一旦我有它

编辑:以下是最终解决方案:

conv_输出_高度=-1
conv_output_width=model.output.shape[2]