在练习书上案例进行IMDb情感分析的时候,对于model.fit()行提示错误TypeError: Can not convert a NoneType into a Tensor or Operation.。具体如下。
train_history=model.fit(x_train,y_train,batch_size=100,epochs=10,verbose=2,validation_split=0.2)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\keras\engine\training.py", line 1213, in fit
self._make_train_function()
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\keras\engine\training.py", line 316, in _make_train_function
loss=self.total_loss)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\keras\optimizer_v2\optimizer_v2.py", line 509, in get_updates
return [self.apply_gradients(grads_and_vars)]
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\keras\optimizer_v2\optimizer_v2.py", line 444, in apply_gradients
kwargs={"name": name})
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\distribute\distribute_lib.py", line 1949, in merge_call
return self._merge_call(merge_fn, args, kwargs)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\distribute\distribute_lib.py", line 1956, in _merge_call
return merge_fn(self._strategy, *args, **kwargs)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\keras\optimizer_v2\optimizer_v2.py", line 497, in _distributed_apply
with ops.control_dependencies(update_ops):
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\framework\ops.py", line 5159, in control_dependencies
return get_default_graph().control_dependencies(control_inputs)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\framework\func_graph.py", line 360, in control_dependencies
return super(FuncGraph, self).control_dependencies(filtered_control_inputs)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\framework\ops.py", line 4583, in control_dependencies
c = self.as_graph_element(c)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3505, in as_graph_element
return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
File "D:\Anaconda3\envs\tensorFlow\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3594, in _as_graph_element_locked
(type(obj).__name__, types_str))
但是我传入训练的x_trian和y_train都不含null或字符串,不知道有没有大佬解答一下。
def read_files(filetype):
path="data/aclImdb/"
file_list=[]
positive_path=path+filetype+'/pos/'
for f in os.listdir(positive_path):#listdir可以生成列表存储指定路径下的一级文件目录
file_list+=[positive_path+f]
negtive_path=path+filetype+'/neg/'
for f in os.listdir(negtive_path):
file_list+=[negtive_path+f]
print('read',filetype,'files:',len(file_list))
all_labels=([1]*12500+[0]*12500)
all_texts=[]
for fi in file_list:
with open(fi,encoding='utf8') as file_input:
all_texts+=[rm_tags(''.join(file_input.readlines()))]
return all_labels,all_texts
y_train,train_text=read_files('train')
y_test,test_text=read_files('test')
token=Tokenizer(num_words=2000)#创建词典
token.fit_on_texts(train_text)#依据频率排序并创建
x_train_seq=token.texts_to_sequences(train_text)#将文本按照词典编号转化为序列
x_test_seq=token.texts_to_sequences(test_text)
x_train=sequence.pad_sequences(x_train_seq,maxlen=100)
x_test=sequence.pad_sequences(x_test_seq,maxlen=100)
这里生成x_train,大小为(25000,100)的array of int32和y_train,大小为25000的list,转化为array也没有用。
以下为模型构建过程。救救孩子吧。
model=Sequential()
model.add(Embedding(output_dim=32,input_dim=2000,input_length=100))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(units=256,activation='relu'))
model.add(Dropout(0.35))
model.add(Dense(units=1,activation='sigmoid'))
model.summary()
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
train_history=model.fit(x_train,y_train,batch_size=100,epochs=10,verbose=2,validation_split=0.2)