问题描述
我正在使用tf创建情感分析模型。因为我是机器学习的新手,所以我遵循了Tensorflow官方文档上的指南来训练和测试带有IMDB_reviews数据集的模型。效果很好,但我希望可以与另一个数据集一起训练。
因此,我下载了此数据集:“ movie_review.csv”。它包含多个列,我想访问文本和标签(标签为正值或负值,文本为评论的文本)。
我想要做的是准备将CSV作为数据集,访问文本和标签,对其进行矢量化,然后将其馈送到网络。测试和训练之间没有划分,所以我也必须划分文件。 所以,我想知道如何:
0 -访问我下载的文件,并将其转换为数据集。
1 -访问文件中的文本和标签,可能无需使用熊猫。如果推荐使用熊猫,并且有一种简单的方法来访问文件并使用TensorFlow传递到网络,我会答应的。
2 -在测试集中和训练集中拆分文件(实际上我已经找到了一个熊猫解决方案)。
3 -对我的文本和标签进行矢量化处理以填充我的网络。
如果您有完整的操作指南,那就很好,只需使用TensorFlow。
问题0至3已回答
好的,我使用发布的文件来加载数据集以训练短句子模型,但是我在训练中遇到了麻烦。 当我按照指南构建文本分类模型时,我得到了以下代码:
dataset,info = tfds.load('imdb_reviews/subwords8k',with_info=True,as_supervised=True)
train_dataset,test_dataset = dataset['train'],dataset['test']
encoder = info.features['text'].encoder
BUFFER_SIZE = 10000
BATCH_SIZE = 64
padded_shapes = ([None],())
train_dataset = train_dataset.shuffle(BUFFER_SIZE).padded_batch(BATCH_SIZE,padded_shapes = padded_shapes)
test_dataset = test_dataset.padded_batch(BATCH_SIZE,padded_shapes = padded_shapes)
model = tf.keras.Sequential([tf.keras.layers.Embedding(encoder.vocab_size,64),tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)),tf.keras.layers.Dense(64,activation='relu'),tf.keras.layers.Dense(1,activation='sigmoid')])
model.compile(loss='binary_crossentropy',optimizer=tf.keras.optimizers.Adam(1e-4),metrics=['accuracy'])
history = model.fit(train_dataset,epochs = 1,validation_data = test_dataset,validation_steps=30,callbacks=[cp_callback])
因此,我以这种方式训练了我的模型(有些零件丢失了,我已经包括了所有基本零件)。此后,我想用另一个数据集训练模型,感谢安德鲁,我以这种方式访问了我创建的数据集:
csv_dataset = tf.data.experimental.CsvDataset(filepath,default_values,header=header)
def reshape_dataset(txt,tag):
txt = tf.reshape(txt,shape=(1,))
tag = tf.reshape(tag,))
return txt,tag
csv_dataset = csv_dataset.map(reshape_dataset)
training = csv_dataset.take(10)
testing = csv_dataset.skip(10)
我的问题是使数据集适应我已经拥有的模型。我尝试了各种解决方案,但是形状出现错误。 有人可以这么温柔地向我解释如何做吗?显然,安德鲁已经在他的文件中发布了第3步的解决方案,但是我想将我的模型与训练中保存的权重一起使用。