Keras NLP神经网络预测下一个字母-ValueError:操作具有“无”梯度

时间:2020-05-10 07:56:40

标签: tensorflow keras nlp

大家好,我遇到上述错误。我认为这与网络形状或目标的预处理有关吗?

import requests
from bs4 import BeautifulSoup

link = "https://en.wikisource.org/wiki/Moral_letters_to_Lucilius"
res  =requests.get(link)
res.status_code


soup= BeautifulSoup(res.text,'html5lib')


a  =soup.find_all('a')



alllinks = []
for h in a:
    try:
        link = h['href']
        alllinks.append(link)
    except:
        pass



x = [link for link in alllinks if "Letter" in link]


final = ['https://en.wikisource.org/'+p for p in x]


import re
def getletter(link):
    res = requests.get(link)
    soup = BeautifulSoup(res.text, 'html5lib')

text = '\n'.join([x.text for x in soup.find_all('p')])
text = re.sub("\s\s+ "," ",text)
text = re.sub("\[\d+\]",'',text)
text = re.sub('\d+.','',text)
text  = text.replace('\n\n',"\n")
return text


keys = [f"Letter {i}" for i in range(1,len(x)+1)]

values = [getletter(f"https://en.wikisource.org{z}") for z in x]


dic = {k:v for k,v in zip(keys,values)}

complete = "\n".join([val for val in dic.values()])


vocab = sorted(set(complete))

char2idx = {c:i for i,c in enumerate(vocab)}


# In[29]:


d2n = [char2idx[char] for char in complete]

import tensorflow as tf


def shift(seq):
    input_data, target_data = seq[:-1],seq[-1]
    return input_data,target_data

SEQ_LEN = 100
BATCH_SIZE =64
BUFFER = 10000

dataset = tf.data.Dataset.from_tensor_slices(d2n)

sequences = dataset.batch(SEQ_LEN+1, drop_remainder=True)

dataset = sequences.map(shift)

dataset = dataset.shuffle(BUFFER).batch(BATCH_SIZE,drop_remainder=True)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Embedding,Dropout

model = Sequential([
    Dense(128, activation='relu', input_dim=100),
    Embedding(len(vocab),256),
    Dense(128, activation='relu'),
    Dropout(0.3),
    Dense(64, activation='relu'),
    Dropout(0.5),
    Dense(len(vocab),activation='softmax')
])
model.summary()
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])



history = model.fit(dataset, epochs=3)

这是错误 ValueError:操作具有None用于渐变。请确保您所有的操作都定义了渐变(即可区分)。没有渐变的常见操作:K.argmax,K.round,K.eval。

0 个答案:

没有答案