python - 从多维数组到 Keras 中的其他形状
问题描述
我有 4 个带有 shape 的输入(batch_train, 128, 30000)
。我想将所有 4 个输入的 softmax 层作为输出。这是我的代码:
inp1.shape = (batch_train, 128, 30000)
inp2.shape = (batch_train, 128, 30000)
inp3.shape = (batch_train, 128, 30000)
inp4.shape = (batch_train, 128, 30000)
conc = tf.keras.layers.Concatenate(axis=0)([inp1[tf.newaxis], inp2[tf.newaxis], inp3[tf.newaxis], inp4[tf.newaxis]])
dense = tf.keras.layers.Dense(num_x)(concat)
drp= tf.keras.layers.Dropout(0.1)(dense)
output = tf.keras.layers.Dense(4)(drp)
但是,我的输出形状是(4, batch_train, 128, 30000, 4)
. 我想要的输出是(train_batch, 4)
. 我究竟做错了什么?
解决方案
我不确定您要在哪个轴上连接,但如果您想要一维输出,则必须展平您的张量:
import tensorflow as tf
inp1 = tf.keras.layers.Input((128, 5))
inp2 = tf.keras.layers.Input((128, 5))
inp3 = tf.keras.layers.Input((128, 5))
inp4 = tf.keras.layers.Input((128, 5))
conc = tf.keras.layers.Concatenate(axis=1)([inp1, inp2, inp3, inp4])
flatten = tf.keras.layers.Flatten()(conc)
dense = tf.keras.layers.Dense(100)(flatten)
drp= tf.keras.layers.Dropout(0.1)(dense)
output = tf.keras.layers.Dense(4)(drp)
model = tf.keras.Model([inp1, inp2, inp3, inp4], output)
batch_size = 5
inputs1, inputs2, inputs3, inputs4 = tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5))
print(model([inputs1, inputs2, inputs3, inputs4]).shape)
(5, 4)
但是,使用如此大的输入形状,您可能会遇到“内存不足”错误。
推荐阅读
- linux - 在脚本中设置和检查别名
- r - 在R studio中将一些土耳其字符大写为“i”到“İ”的问题
- react-hooks - TypeError:无法读取 null 的属性“搜索”。我不知道如何解决
- android-studio - Flutter 中的 youtube_player_flutter 包中没有名为“errorBuilder”的命名参数
- javascript - 如何通过从工作箱 cli 生成服务工作人员文件来启用调试模式?
- nginx - 是否可以使用 nginx 代理将主机设置为服务名称?
- python - 列表理解的项目,在 z3 模型中部分评估
- javascript - 在对象内部的函数中访问对象的属性
- linux - 重建/重新编译 Debian 9 软件包
- android - 获取根元素必须格式正确。android构建中的错误