我正在使用带有 keras 的 tensorflow 来使用 google colabs 训练到 char-RNN。我将模型训练 10 个 epoch 并保存它,使用“model.save()”,如保存模型的文档中所示。紧接着,我再次加载它只是为了检查,我尝试在加载的模型上调用 model.fit() 并使用完全相同的训练集得到“尺寸必须相等”错误。训练数据位于分批组织的 tensorflow 数据集中,如tf datasets 的文档中所示。这是一个最小的工作示例:
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
X = np.random.randint(0,50,(10000))
seq_len = 150
batch_size = 20
dataset = tf.data.Dataset.from_tensor_slices(X)
dataset = dataset.batch(seq_len+1,drop_remainder=True)
dataset = dataset.map(lambda x: (x[:-1],x[1:]))
dataset = dataset.shuffle(20).batch(batch_size,drop_remainder=True)
def make_model(vocabulary_size,embedding_dimension,rnn_units,batch_size,stateful):
model = Sequential()
model.add(Embedding(vocabulary_size,embedding_dimension,
batch_input_shape=[batch_size,None]))
model.add(LSTM(rnn_units,return_sequences=True,stateful=stateful))
model.add(Dense(vocabulary_size))
model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer='adam',metrics=['accuracy'])
model.summary()
return model
vocab_size = 51
emb_dim = 20
rnn_units = 10
model = make_model(vocab_size,emb_dim,rnn_units,batch_size,False)
model.fit(dataset,epochs=10)
model.save('/content/test_model')
model2 = tf.keras.models.load_model('/content/test_model')
model2.fit(dataset,epochs=10)
第一个训练行“model.fit()”运行良好,但最后一行返回错误:
ValueError:尺寸必须相等,但对于输入形状为 [20]、[20,150] 的“{{node Equal}} = Equal[T=DT_INT64, incompatible_shape_error=true](ArgMax, ArgMax_1)”,尺寸必须是 20 和 150。
我希望以后能够恢复训练,因为我的真实数据集要大得多。因此,仅保存权重并不是一个理想的选择。
有什么建议吗?谢谢!