Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
将model.fit-in keras与自定义列车步骤一起使用时出错 BATCH\u SIZE=32 dataset=tf.data.dataset.from_tensor_切片((问题,ans)).shuffle(1000) dataset=dataset.batch(批大小,拖放余数=True) 类编码器(tf.keras.Model): def_uuuinit_uuuu(self,vocab_输入=1000,vocab_输出=1000,批处理大小=32): super()。\uuuu init\uuuuu() #编码器 self.encoder\u vector=tokens.textVectoriation(vocab\u输入,输出\u序列\u长度=24) self.encoder_embedding=tf.keras.layers.embedding(vocab_输入,256) self.encoder_lstm=tf.keras.layers.lstm(512,返回_序列=True) self.attention=tf.keras.layers.attention() #译码器 self.decoder\u vector=tokens.textVectoriation(vocab\u输出,输出\u序列\u长度=20) self.decoder_embedding=tf.keras.layers.embedding(vocab_输出,256) self.fc=tf.keras.layers.density(语音输出) self.decoder_lstm=tf.keras.layers.lstm(512,返回_序列=True) def损失_功能(真实、预测): 掩码=tf.math.logical_not(tf.math.equal(real,0)) 损耗=损耗对象(真实,预测) mask=tf.cast(mask,dtype=loss_uz.dtype) 损耗*=掩模 返回tf.减少平均值(损失) def系列步骤(自身、数据): 损失=0 输入=p[0] targ=p[1] 输入=自编码器\矢量(输入) targ=自译码器\向量(targ) 使用tf.GradientTape()作为磁带: 输入=自编码器嵌入(输入) enc_输出,enc_h,enc_c=self.encoder_lstm(输入) attn_output=自我注意([enc_output,enc_h]) dec_h=tf.concat([tf.expand_dims(attn_输出,1),dec_h],轴=-1) dec_input=tf.expand_dims([self.decoder_vector(['SOS'])]*批量大小,1) 预测=[] 对于范围内的t(1,目标形状[1]): dec_输入=自译码器_嵌入(dec_输入) dec_输出,dec_h,dec_c=自译码器(dec_输入,初始状态=[dec_h,enc_c]) 预测=self.fc(dec_输出) 损失+=损失函数(目标[:,t],预测) dec_input=tf.expand_dims(目标[:,t],1) 梯度=磁带梯度(损失、可训练变量) self.optimizer.apply_梯度(zip(梯度,可训练的_变量)) 自我编译的度量。更新状态(目标、预测) 返回{m.name:m.result(),用于self.metrics中的m} 型号=编码器 compile(优化器='adam',metrics=[tf.keras.metrics.SparseCategoricalCrossentropy()]) model.fit(数据集,历代=10) 纪元1/10 --------------------------------------------------------------------------- StagingError回溯(最近一次呼叫上次) 在() ---->1 model.fit(数据集,历代=10) 10帧 /包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs) 966例外情况为e:#pylint:disable=broad Exception 967如果hasattr(e,“ag\u错误\u元数据”): -->968将e.ag\u错误\u元数据引发到\u异常(e) 969其他: 970加薪 StagingError:在用户代码中: /usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:571 train_函数* 输出=self.distribution\u strategy.run( :33火车站* 输入=自编码器\矢量(输入) /usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/base\u layer.py:897\u调用** 自我构建(输入) /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base\u-layer.py:2416\u-build self.build(输入形状)#pylint:disable=不可调用 /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/preprocessing/text_-vectorization.py:528 build 如果self._split不是None且不是input_shape[1]==1:35; pylint:disable=g-比较-否定 /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor\u-shape.py:870\u-getitem__ 返回self.\u dims[key].值 索引器:列表索引超出范围_Python_List_Keras_Tuples_Tensorflow2.0 - Fatal编程技术网

将model.fit-in keras与自定义列车步骤一起使用时出错 BATCH\u SIZE=32 dataset=tf.data.dataset.from_tensor_切片((问题,ans)).shuffle(1000) dataset=dataset.batch(批大小,拖放余数=True) 类编码器(tf.keras.Model): def_uuuinit_uuuu(self,vocab_输入=1000,vocab_输出=1000,批处理大小=32): super()。\uuuu init\uuuuu() #编码器 self.encoder\u vector=tokens.textVectoriation(vocab\u输入,输出\u序列\u长度=24) self.encoder_embedding=tf.keras.layers.embedding(vocab_输入,256) self.encoder_lstm=tf.keras.layers.lstm(512,返回_序列=True) self.attention=tf.keras.layers.attention() #译码器 self.decoder\u vector=tokens.textVectoriation(vocab\u输出,输出\u序列\u长度=20) self.decoder_embedding=tf.keras.layers.embedding(vocab_输出,256) self.fc=tf.keras.layers.density(语音输出) self.decoder_lstm=tf.keras.layers.lstm(512,返回_序列=True) def损失_功能(真实、预测): 掩码=tf.math.logical_not(tf.math.equal(real,0)) 损耗=损耗对象(真实,预测) mask=tf.cast(mask,dtype=loss_uz.dtype) 损耗*=掩模 返回tf.减少平均值(损失) def系列步骤(自身、数据): 损失=0 输入=p[0] targ=p[1] 输入=自编码器\矢量(输入) targ=自译码器\向量(targ) 使用tf.GradientTape()作为磁带: 输入=自编码器嵌入(输入) enc_输出,enc_h,enc_c=self.encoder_lstm(输入) attn_output=自我注意([enc_output,enc_h]) dec_h=tf.concat([tf.expand_dims(attn_输出,1),dec_h],轴=-1) dec_input=tf.expand_dims([self.decoder_vector(['SOS'])]*批量大小,1) 预测=[] 对于范围内的t(1,目标形状[1]): dec_输入=自译码器_嵌入(dec_输入) dec_输出,dec_h,dec_c=自译码器(dec_输入,初始状态=[dec_h,enc_c]) 预测=self.fc(dec_输出) 损失+=损失函数(目标[:,t],预测) dec_input=tf.expand_dims(目标[:,t],1) 梯度=磁带梯度(损失、可训练变量) self.optimizer.apply_梯度(zip(梯度,可训练的_变量)) 自我编译的度量。更新状态(目标、预测) 返回{m.name:m.result(),用于self.metrics中的m} 型号=编码器 compile(优化器='adam',metrics=[tf.keras.metrics.SparseCategoricalCrossentropy()]) model.fit(数据集,历代=10) 纪元1/10 --------------------------------------------------------------------------- StagingError回溯(最近一次呼叫上次) 在() ---->1 model.fit(数据集,历代=10) 10帧 /包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs) 966例外情况为e:#pylint:disable=broad Exception 967如果hasattr(e,“ag\u错误\u元数据”): -->968将e.ag\u错误\u元数据引发到\u异常(e) 969其他: 970加薪 StagingError:在用户代码中: /usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:571 train_函数* 输出=self.distribution\u strategy.run( :33火车站* 输入=自编码器\矢量(输入) /usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/base\u layer.py:897\u调用** 自我构建(输入) /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base\u-layer.py:2416\u-build self.build(输入形状)#pylint:disable=不可调用 /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/preprocessing/text_-vectorization.py:528 build 如果self._split不是None且不是input_shape[1]==1:35; pylint:disable=g-比较-否定 /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor\u-shape.py:870\u-getitem__ 返回self.\u dims[key].值 索引器:列表索引超出范围

将model.fit-in keras与自定义列车步骤一起使用时出错 BATCH\u SIZE=32 dataset=tf.data.dataset.from_tensor_切片((问题,ans)).shuffle(1000) dataset=dataset.batch(批大小,拖放余数=True) 类编码器(tf.keras.Model): def_uuuinit_uuuu(self,vocab_输入=1000,vocab_输出=1000,批处理大小=32): super()。\uuuu init\uuuuu() #编码器 self.encoder\u vector=tokens.textVectoriation(vocab\u输入,输出\u序列\u长度=24) self.encoder_embedding=tf.keras.layers.embedding(vocab_输入,256) self.encoder_lstm=tf.keras.layers.lstm(512,返回_序列=True) self.attention=tf.keras.layers.attention() #译码器 self.decoder\u vector=tokens.textVectoriation(vocab\u输出,输出\u序列\u长度=20) self.decoder_embedding=tf.keras.layers.embedding(vocab_输出,256) self.fc=tf.keras.layers.density(语音输出) self.decoder_lstm=tf.keras.layers.lstm(512,返回_序列=True) def损失_功能(真实、预测): 掩码=tf.math.logical_not(tf.math.equal(real,0)) 损耗=损耗对象(真实,预测) mask=tf.cast(mask,dtype=loss_uz.dtype) 损耗*=掩模 返回tf.减少平均值(损失) def系列步骤(自身、数据): 损失=0 输入=p[0] targ=p[1] 输入=自编码器\矢量(输入) targ=自译码器\向量(targ) 使用tf.GradientTape()作为磁带: 输入=自编码器嵌入(输入) enc_输出,enc_h,enc_c=self.encoder_lstm(输入) attn_output=自我注意([enc_output,enc_h]) dec_h=tf.concat([tf.expand_dims(attn_输出,1),dec_h],轴=-1) dec_input=tf.expand_dims([self.decoder_vector(['SOS'])]*批量大小,1) 预测=[] 对于范围内的t(1,目标形状[1]): dec_输入=自译码器_嵌入(dec_输入) dec_输出,dec_h,dec_c=自译码器(dec_输入,初始状态=[dec_h,enc_c]) 预测=self.fc(dec_输出) 损失+=损失函数(目标[:,t],预测) dec_input=tf.expand_dims(目标[:,t],1) 梯度=磁带梯度(损失、可训练变量) self.optimizer.apply_梯度(zip(梯度,可训练的_变量)) 自我编译的度量。更新状态(目标、预测) 返回{m.name:m.result(),用于self.metrics中的m} 型号=编码器 compile(优化器='adam',metrics=[tf.keras.metrics.SparseCategoricalCrossentropy()]) model.fit(数据集,历代=10) 纪元1/10 --------------------------------------------------------------------------- StagingError回溯(最近一次呼叫上次) 在() ---->1 model.fit(数据集,历代=10) 10帧 /包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs) 966例外情况为e:#pylint:disable=broad Exception 967如果hasattr(e,“ag\u错误\u元数据”): -->968将e.ag\u错误\u元数据引发到\u异常(e) 969其他: 970加薪 StagingError:在用户代码中: /usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/training.py:571 train_函数* 输出=self.distribution\u strategy.run( :33火车站* 输入=自编码器\矢量(输入) /usr/local/lib/python3.6/dist包/tensorflow/python/keras/engine/base\u layer.py:897\u调用** 自我构建(输入) /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base\u-layer.py:2416\u-build self.build(输入形状)#pylint:disable=不可调用 /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/preprocessing/text_-vectorization.py:528 build 如果self._split不是None且不是input_shape[1]==1:35; pylint:disable=g-比较-否定 /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor\u-shape.py:870\u-getitem__ 返回self.\u dims[key].值 索引器:列表索引超出范围,python,list,keras,tuples,tensorflow2.0,Python,List,Keras,Tuples,Tensorflow2.0,我试图在我的自定义类中覆盖keras model train_步骤。 问题是一组英文文本问题,ans是它们各自的答案。它们的长度是随机的,没有填充,因为文本向量化会添加填充。所以数据集包含问题-答案对。现在我批处理这个问题并使用model.fit。 错误是在train_步骤中分配input=data[0]和targ=data[1]时发生的。我需要有关如何为批次分配train步骤中的输入和输出的帮助 BATCH_SIZE =32 dataset = tf.data.Dataset.from_ten

我试图在我的自定义类中覆盖keras model train_步骤。 问题是一组英文文本问题,ans是它们各自的答案。它们的长度是随机的,没有填充,因为文本向量化会添加填充。所以数据集包含问题-答案对。现在我批处理这个问题并使用model.fit。 错误是在train_步骤中分配input=data[0]和targ=data[1]时发生的。我需要有关如何为批次分配train步骤中的输入和输出的帮助

BATCH_SIZE =32
dataset = tf.data.Dataset.from_tensor_slices((question, ans)).shuffle(1000)
dataset = dataset.batch(BATCH_SIZE, drop_remainder=True)
class EncoderDecoder(tf.keras.Model):
  def __init__(self,vocab_input=1000,vocab_output=1000,BATCH_SIZE=32):
    super().__init__()
    #Encoder
    self.encoder_vector = tokens.TextVectorization(vocab_input,output_sequence_length=24)
    self.encoder_embedding = tf.keras.layers.Embedding(vocab_input,256)
    self.encoder_lstm = tf.keras.layers.LSTM(512,return_sequences=True)

    self.attention = tf.keras.layers.Attention()

    #Decoder
    self.decoder_vector = tokens.TextVectorization(vocab_output,output_sequence_length=20)
    self.decoder_embedding = tf.keras.layers.Embedding(vocab_output,256)
    self.fc = tf.keras.layers.Dense(vocab_output)
    self.decoder_lstm = tf.keras.layers.LSTM(512,return_sequences=True)


  def loss_function(real, pred):
    mask = tf.math.logical_not(tf.math.equal(real, 0))
    loss_ = loss_object(real, pred)

    mask = tf.cast(mask, dtype=loss_.dtype)
    loss_ *= mask

    return tf.reduce_mean(loss_)


  def train_step(self,data):
    loss =0
    input = p[0] 
    targ = p[1]

    input = self.encoder_vector(input)
    targ = self.decoder_vector(targ)

    with tf.GradientTape() as tape:
      input = self.encoder_embedding(input)
      enc_output,enc_h,enc_c = self.encoder_lstm(input)

      attn_output = self.attention([enc_output,enc_h])


      dec_h = tf.concat([tf.expand_dims(attn_output, 1), dec_h], axis=-1)
      dec_input = tf.expand_dims([self.decoder_vector(['SOS'])]*BATCH_SIZE,1)
      predictions = []

      for t in range(1,targ.shape[1]):
        dec_input = self.decoder_embedding(dec_input)
        dec_output,dec_h,dec_c = self.decoder_lstm(dec_input,initial_states=[dec_h,enc_c])
        predictions = self.fc(dec_output)

        loss+=loss_function(targ[:,t],predictions)

        dec_input = tf.expand_dims(targ[:, t], 1)

      gradients = tape.gradient(loss,trainable_variables)

      self.optimezer.apply_gradients(zip(gradients,trainable_variables))

      self.compiled_metrics.update_state(targ,predictions)

      return {m.name:m.result() for m in self.metrics}

model = EncoderDecoder()
model.compile(optimizer = 'adam',metrics = [tf.keras.metrics.SparseCategoricalCrossentropy()])

model.fit(dataset,epochs=10)

Epoch 1/10
---------------------------------------------------------------------------
StagingError                              Traceback (most recent call last)
<ipython-input-153-573fadf7e010> in <module>()
----> 1 model.fit(dataset,epochs=10)

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    966           except Exception as e:  # pylint:disable=broad-except
    967             if hasattr(e, "ag_error_metadata"):
--> 968               raise e.ag_error_metadata.to_exception(e)
    969             else:
    970               raise

StagingError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:571 train_function  *
        outputs = self.distribute_strategy.run(
    <ipython-input-151-46787da81d42>:33 train_step  *
        input = self.encoder_vector(input)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:897 __call__  **
        self._maybe_build(inputs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:2416 _maybe_build
        self.build(input_shapes)  # pylint:disable=not-callable
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/layers/preprocessing/text_vectorization.py:528 build
        if self._split is not None and not input_shape[1] == 1:  # pylint: disable=g-comparison-negation
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor_shape.py:870 __getitem__
        return self._dims[key].value

    IndexError: list index out of range