Python ValueError:请使用'layer'实例初始化'TimeDistributed'层
我试图建立一个模型,可以训练音频和视频样本,但我得到这个错误Python ValueError:请使用'layer'实例初始化'TimeDistributed'层,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我试图建立一个模型,可以训练音频和视频样本,但我得到这个错误 ValueError:请使用'layer'实例初始化'TimeDistributed'层。您通过了:Tensor(“input_13:0”,shape=(None,5648384,3),dtype=float32) 以下是我的三个模型函数: def build_convnet(shape=(648, 384, 3)): momentum = .9 model = tf.keras.models.Sequential(
ValueError:请使用'layer'实例初始化'TimeDistributed'层。您通过了:Tensor(“input_13:0”,shape=(None,5648384,3),dtype=float32)
以下是我的三个模型函数:
def build_convnet(shape=(648, 384, 3)):
momentum = .9
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(64, (2,2), input_shape=shape,padding='same', activation='relu'))
model.add(tf.keras.layers.Conv2D(64, (2,2), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(momentum=momentum))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(128, (3,3), padding='same', activation='relu'))
model.add(tf.keras.layers.Conv2D(128, (3,3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(momentum=momentum))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(256, (3,3), padding='same', activation='relu'))
model.add(tf.keras.layers.Conv2D(256, (3,3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(momentum=momentum))
model.add(tf.keras.layers.GlobalMaxPool2D())
print(model.summary())
return model
我试图搜索,但我只能找到一个答案,但我并不真正理解它,所以如果有人能在这里帮助我,那将是巨大的帮助。提前谢谢 问题在下面的部分。将此部分从功能更改为: 只需尝试使用功能模型而不是顺序模型将build_convnet上的部分嵌入到动作模型中
TD = tf.keras.layers.TimeDistributed(convnet)(input_shape)
我尝试将这两个函数组合起来,但仍然会产生相同的值错误。我已经在这里上传了组合函数TypeError:\uuuu init\uuuu()缺少1个必需的位置参数:“layer”这就是遵循本指南的内容。抱歉,您只是混淆了OP,TimeDistributed将层作为第一个参数,因此正确的调用是TimeDistributed(convnet)(input_shape)。这一行应该做什么?TD=tf.keras.layers.TimeDistributed(输入_形)(convnet)@MatiasValdenegro这是一个时间分布层。因为这里的输入是5维的,视频是按时间序列分析的,所以我添加了这一层。它应该以一个conv网络作为输入(3维),那么参数的顺序就错了,它应该是TD=tf.keras.layers.TimeDistributed(convnet)(input_shape)@MatiasValdenegro Yes。我知道了,但它仍然显示相同的错误它不可能是完全相同的错误,请添加新错误的完整回溯
def audio_and_final_model():
input_shape = tf.keras.layers.Input(shape=(220941,1))
Conv1 = tf.keras.layers.Conv1D(16,activation='relu',kernel_size=(10))(input_shape)
MaxPool1 = tf.keras.layers.MaxPool1D()(Conv1)
Dropout1 = tf.keras.layers.Dropout(0.2)(MaxPool1)
Conv2 = tf.keras.layers.Conv1D(32,activation='relu',kernel_size=(10))(Dropout1)
MaxPool2 = tf.keras.layers.MaxPool1D()(Conv2)
Dropout2 = tf.keras.layers.Dropout(0.2)(MaxPool2)
Conv3 = tf.keras.layers.Conv1D(16,activation='relu',kernel_size=(10))(Dropout2)
MaxPool3 = tf.keras.layers.MaxPool1D()(Conv3)
Dropout3 = tf.keras.layers.Dropout(0.2)(MaxPool3)
Flatten = tf.keras.layers.Flatten()(Dropout3)
Dense1 = tf.keras.layers.Dense(128,activation='relu')(Flatten)
Dense2 = tf.keras.layers.Dense(64,activation='relu')(Dense1)
model = tf.keras.models.Model(inputs=input_shape,outputs=Dense2)
return model
INSHAPEAM = (5, 648, 384, 3)
INSHAPEAFM = (220941,1)
am = action_model()
afm = audio_and_final_model()
combined = tf.keras.layers.Concatenate([am.output,afm.output])
z = tf.keras.layers.Dense(2,activation='softmax')(combined)
model = tf.keras.models.Model(inputs=[INSHAPEAM,INSHAPEAFM],outputs=z)
TD = tf.keras.layers.TimeDistributed(convnet)(input_shape)