python - 我无法将列表转换为适合 keras 模型的张量
问题描述
我定义了一个如下的深度模型:
model = Sequential()
inputs = keras.Input(shape=(19,))
layer1 = Dense(38, activation='relu')(inputs)
layer2 = Dense(19, activation='relu')(layer1)
layer3 = Dense(38, activation='relu')(layer2)
outputs1 = keras.layers.Dense(19, activation='softmax', name='loss1')(layer3)
outputs2 = keras.layers.Dense(19, activation='softmax', name='loss2')(layer3)
model = keras.Model(inputs=[inputs], outputs=[outputs1,outputs2])
model.compile(loss=['kullback_leibler_divergence', 'kullback_leibler_divergence'],
metrics=['accuracy'], optimizer='adam', loss_weights=[1.0, 1.0])
model.fit(X_train,[y1_target,y2_target],epochs=10,batch_size=64)
但我收到此错误:
无法将 NumPy 数组转换为张量(不支持的对象类型列表)。
所以我尝试通过以下方式将列表转换为张量:
tf.convert_to_tensor(X_train, dtype=tf.float32)
我遇到了这个错误:使用序列设置数组元素。
所以我尝试使用以下代码:
def vector_seq(sequences, dimension =19):
print(type(sequences))
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1.
return results
X_train = vector_seq(X_train)
y1_target = asarray(y1_target)
y2_target = asarray(y2_target)
但是对于上面的代码,我又遇到了这个错误:只有整数、切片(:
)、省略号(...
)、numpy.newaxis(None
)和整数或布尔数组是有效的索引
X_train 就像这个图像: y1_target 和 y2_target 类似于 X_train。
我该如何解决这些错误?
解决方案
我解决了这个问题,首先将 X_train 转换为 numpy 数组(最初 X_train 是数据帧的行(一列):
X_train = np.asarray(X_train)
然后
X = np.array(X_train.tolist())
X=tf.convert_to_tensor(X, dtype=tf.float32)
它有效!
推荐阅读
- windows - 汇编程序 printf 函数的奇怪行为
- vue.js - 如何在渲染 Vue 组件之前等待窗口对象中的变量?
- swift - 如何在 Swift 中编写一个将枚举与枚举案例进行比较的函数
- node.js - 如何让我的 Discord Bot 删除服务器中的所有频道
- r - 使用表函数计算 R 中的样本比例
- firebase - Firebase 电话身份验证:一些用户没有收到 OTP
- javascript - (已解决)将 Ruby ROR 变量传递给 Javascript 小部件脚本的正确方法是什么?
- c# - 如何从 HTML 的下拉列表中获取选定的值到 C#
- spring-boot - JPARepository CPRQ 修改不保存完整对象
- python - Pandas 多索引