如何将这个RNN文本分类代码改为文本生成?

我有一个使用TensorFlow RNN进行文本分类的代码,但是如何将其改为进行文本生成呢?

下面的文本分类具有3D输入,但输出是2D的。是否应该将其改为3D输入和3D输出以进行文本生成?如果是,应该怎么做呢?

示例数据如下:

t0      t1      t2british gray    is => cat (y=0)0       1       2white   samoyed is => dog (y=1)3       4       2 

对于分类,输入“british gray is”会得到“cat”。我希望输入“british”能够得到下一个词“gray”。

import tensorflow as tf;tf.reset_default_graph();#data'''t0      t1      t2british gray    is => cat (y=0)0       1       2white   samoyed is => dog (y=1)3       4       2 '''Bsize = 2;Times = 3;Max_X = 4;Max_Y = 1;X = [[[0],[1],[2]], [[3],[4],[2]]];Y = [[0],           [1]          ];#normalisefor I in range(len(X)):  for J in range(len(X[I])):    X[I][J][0] /= Max_X;for I in range(len(Y)):  Y[I][0] /= Max_Y;#modelInputs   = tf.placeholder(tf.float32, [Bsize,Times,1]);Expected = tf.placeholder(tf.float32, [Bsize,      1]);#single LSTM layer#'''Layer1   = tf.keras.layers.LSTM(20);Hidden1  = Layer1(Inputs);#'''#multi LSTM layers'''Layers = tf.keras.layers.RNN([  tf.keras.layers.LSTMCell(30), #hidden 1  tf.keras.layers.LSTMCell(20)  #hidden 2]);Hidden2 = Layers(Inputs);'''Weight3  = tf.Variable(tf.random_uniform([20,1], -1,1));Bias3    = tf.Variable(tf.random_uniform([   1], -1,1));Output   = tf.sigmoid(tf.matmul(Hidden1,Weight3) + Bias3);Loss     = tf.reduce_sum(tf.square(Expected-Output));Optim    = tf.train.GradientDescentOptimizer(1e-1);Training = Optim.minimize(Loss);#trainSess = tf.Session();Init = tf.global_variables_initializer();Sess.run(Init);Feed = {Inputs:X, Expected:Y};for I in range(1000): #number of feeds, 1 feed = 1 batch  if I%100==0:     Lossvalue = Sess.run(Loss,Feed);    print("Loss:",Lossvalue);  #end if  Sess.run(Training,Feed);#end forLastloss = Sess.run(Loss,Feed);print("Loss:",Lastloss,"(Last)");#evalResults = Sess.run(Output,Feed);print("\nEval:");print(Results);print("\nDone.");#eof

回答:

我找到了如何将其(代码)转换为进行文本生成任务的方法,使用3D输入(X)和3D标签(Y),如下面的源代码所示:

源代码:

import tensorflow as tf;tf.reset_default_graph();#data'''t0       t1       t2british  gray     is  cat0        1        2   (3)  <=x1        2        3        <=ywhite    samoyed  is  dog4        5        2   (6)  <=x5        2        6        <=y '''Bsize = 2;Times = 3;Max_X = 5;Max_Y = 6;X = [[[0],[1],[2]], [[4],[5],[2]]];Y = [[[1],[2],[3]], [[5],[2],[6]]];#normalisefor I in range(len(X)):  for J in range(len(X[I])):    X[I][J][0] /= Max_X;for I in range(len(Y)):  for J in range(len(Y[I])):    Y[I][J][0] /= Max_Y;#modelInput    = tf.placeholder(tf.float32, [Bsize,Times,1]);Expected = tf.placeholder(tf.float32, [Bsize,Times,1]);#single LSTM layer'''Layer1   = tf.keras.layers.LSTM(20);Hidden1  = Layer1(Input);'''#multi LSTM layers#'''Layers = tf.keras.layers.RNN([  tf.keras.layers.LSTMCell(30), #hidden 1  tf.keras.layers.LSTMCell(20)  #hidden 2],return_sequences=True);Hidden2 = Layers(Input);#'''Weight3  = tf.Variable(tf.random_uniform([20,1], -1,1));Bias3    = tf.Variable(tf.random_uniform([   1], -1,1));Output   = tf.sigmoid(tf.matmul(Hidden2,Weight3) + Bias3); #sequence of 2d * 2dLoss     = tf.reduce_sum(tf.square(Expected-Output));Optim    = tf.train.GradientDescentOptimizer(1e-1);Training = Optim.minimize(Loss);#trainSess = tf.Session();Init = tf.global_variables_initializer();Sess.run(Init);Feed   = {Input:X, Expected:Y};Epochs = 10000;for I in range(Epochs): #number of feeds, 1 feed = 1 batch  if I%(Epochs/10)==0:     Lossvalue = Sess.run(Loss,Feed);    print("Loss:",Lossvalue);  #end if  Sess.run(Training,Feed);#end forLastloss = Sess.run(Loss,Feed);print("Loss:",Lastloss,"(Last)");#evalResults = Sess.run(Output,Feed).tolist();print("\nEval:");for I in range(len(Results)):  for J in range(len(Results[I])):    for K in range(len(Results[I][J])):      Results[I][J][K] = round(Results[I][J][K]*Max_Y);#end for i      print(Results);print("\nDone.");#eof

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注