Python 使用Keras进行训练时的Tensorflow无效辩论(指数)

Python 使用Keras进行训练时的Tensorflow无效辩论(指数),python,tensorflow,keras,lstm,one-hot-encoding,Python,Tensorflow,Keras,Lstm,One Hot Encoding,我试图在一些数据上训练LSTM网络,不幸的是,我一直遇到以下错误: InvalidArgumentError:index[]=不在[04704]中 对180596个样本进行训练,对45149个样本进行验证 纪元1/1 --------------------------------------------------------------------------- InvalidArgumentError回溯(最后一次最近调用) 在() 14个时代=1, 15批次尺寸=128, --->16验

我试图在一些数据上训练LSTM网络,不幸的是,我一直遇到以下错误:
InvalidArgumentError:index[]=不在[04704]中

对180596个样本进行训练,对45149个样本进行验证
纪元1/1
---------------------------------------------------------------------------
InvalidArgumentError回溯(最后一次最近调用)
在()
14个时代=1,
15批次尺寸=128,
--->16验证(单位分割=0.2)
c:\program files\python3x64\lib\site packages\keras\engine\training.py in fit(self、x、y、批大小、历元、详细、回调、验证分割、验证数据、混洗、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、**kwargs)
1040初始纪元=初始纪元,
1041步/u历元=步/u历元,
->1042验证步骤=验证步骤)
1043
1044 def评估(自我,x=无,y=无,
c:\program files\python3x64\lib\site packages\keras\engine\training\u arrays.py in-fit\u循环(模型、f、ins、out\u标签、批大小、历元、详细信息、回调、val\u f、val\u-ins、shuffle、回调度量、初始历元、每个历元的步骤、验证步骤)
197 ins_批次[i]=ins_批次[i].toarray()
198
-->199输出=f(输入/输出批次)
200如果不存在(输出,列表):
201出局=[出局]
c:\program files\python3x64\lib\site packages\keras\backend\tensorflow\u backend.py in\uuuu\u调用(self,输入)
2659返回自。\u遗留\u调用(输入)
2660
->2661返回自呼(输入)
2662其他:
2663如果py_有(输入中x的张量为x):
c:\program files\python3x64\lib\site packages\keras\backend\tensorflow\u backend.py in\u调用(self,inputs)
2629 symbol\u VAL,
(第2630次会议)
->2631 fetched=self.\u callable\u fn(*array\u vals)
2632获取的返回[:len(自输出)]
2633
c:\program files\python3x64\lib\site packages\tensorflow\python\client\session.py在调用中(self,*args)
1452其他:
1453返回tf_session.tf_DeprecatedSessionRunCallable(
->1454 self.\u session.\u session,self.\u handle,args,status,None)
1455
1456定义(自我):
c:\program files\python3x64\lib\site packages\tensorflow\python\framework\errors\u impl.py in\uuuuuuuu exit\uuuuuuu(self,type\u arg,value\u arg,traceback\u arg)
517没有,没有,
518 compat.as_text(c_api.TF_消息(self.status.status)),
-->519 c_api.TF_GetCode(self.status.status))
520#从内存中删除基础状态对象,否则它将保持活动状态
521#由于以下原因,在回溯中有一个状态参考:
InvalidArgumentError:索引[62,0]=15757不在[04704]中
[[Node:embedding_15/embedding_lookup=GatherV2[Taxis=DT_INT32,Tindices=DT_INT32,Tparams=DT_FLOAT,_class=[“loc:@training_14/RMSprop/Assign_1”],[u device=“/job:localhost/replica:0/任务:0/设备:CPU:0”](embedding_15/embeddings/reads,embedding_15/Cast,embedding_15/Cast,training_14/渐变/embedding_lookup/grade/concat/axis)]]
我试图找到一个解决方案,但没有成功。
我使用的数据是一个热编码和规范化的网络流。
至少在NaN值和无穷大值方面,我至少应该是好的。 以下是输入数据的概览:

[14]中的

打印(流和形状)
打印(类型(流动和流动))
打印(类型(流和[0]))
(225745, 4704)
这就是网络本身:

从keras.models导入
从keras.layers导入稠密、嵌入
从keras.layers导入LSTM
模型=顺序()
添加模型(嵌入(流与形状[-1],32))
模型添加(LSTM(32))
model.add(密集型(1,激活='sigmoid'))
model.compile(优化器='rmsprop',
损失='binary\u交叉熵',
指标=['acc'])
历史=模型.fit(流量、附件标签、,
纪元=1,
批次大小=128,
验证(拆分=0.2)
根据我所读到的,tensorflow中的vocab大小可能有问题,但我不确定我是否可以改变Keras层中的vocab大小

如果有人想仔细看看,我已经组装了一个

非常感谢您的帮助,谢谢

解决方案:
如前所述,我是将功能的数量传递到嵌入层,而不是词汇表大小()。这就是我如何将代码更新为工作示例的方法:

#查找最大词汇量
voc_size=(flows_scaled.max()+1).astype('int64')
打印(voc_尺寸)
#建立模型
从keras.models导入顺序
从keras.layers导入稠密、嵌入
从keras.layers导入LSTM
模型=顺序()
模型添加(嵌入(voc_大小,32))
模型添加(LSTM(32))
model.add(密集型(1,激活='sigmoid'))
model.compile(优化器='rmsprop',
损失='binary\u交叉熵',
指标=['acc'])
历史=模型.fit(流量缩放、enc标签、,
纪元=1,
批次大小=128,
验证(拆分=0.2)

嵌入层希望第一个参数是词汇表的大小,即

但是您将功能的数量作为词汇表大小传递。您可以做的是,在流中找到最大数量,然后将最大数量加上1传递给嵌入层

voc_size = flows_nd.max()+1

model = Sequential()
model.add(Embedding(voc_size, 32))