Keras 模型输入形状与图层不兼容(尽管是兼容的形状)

问题描述 投票:0回答:1

在过去的两天里,我真的一直在努力解决这个问题。我创建了一个文件

test.py
通过预测单个样本来测试我的模型:

import os
import keras
import numpy as np
import tensorflow as tf
from main_copy import path_to_fft

model = keras.models.load_model(os.path.join(os.getcwd(), "model.keras"))

model.summary()
model.summary(expand_nested=True)

first_sample = path_to_fft(os.path.join(os.getcwd(), 'Sounds', 'Thomas', 'thomas_original.wav'))
second_sample = path_to_fft(os.path.join(os.getcwd(), 'Sounds', 'Thomas', 'thomas_original.wav'))

print("First: ", first_sample.shape)
print("Second: ", second_sample.shape)

prediction = model.predict([first_sample, second_sample])
print(prediction)

path_to_fft
函数解码 .wav 文件并应用快速傅立叶变换,然后返回该变换的正频率的前半部分,将 5 秒 16kHz 音频从形状 (80000, 1) 变换为 (40000, 1) ,这是适合我的模型的尺寸。但是,当我尝试使用
model.predict
预测两个样本之间的距离时,我收到以下错误消息:

Model: "functional"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Layer (type)                  ┃ Output Shape              ┃         Param # ┃ Connected to               ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ InputA (InputLayer)           │ (None, 40000, 1)          │               0 │ -                          │
├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤
│ InputB (InputLayer)           │ (None, 40000, 1)          │               0 │ -                          │
├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤
│ SiameseBranch (Functional)    │ (None, 32)                │      14,003,824 │ InputA[0][0], InputB[0][0] │
├───────────────────────────────┼───────────────────────────┼─────────────────┼────────────────────────────┤
│ lambda (Lambda)               │ (None, 1)                 │               0 │ SiameseBranch[0][0],       │
│                               │                           │                 │ SiameseBranch[1][0]        │
└───────────────────────────────┴───────────────────────────┴─────────────────┴────────────────────────────┘

 Input 0 of layer "SiameseBranch" is incompatible with the layer: expected shape=(None, 40000, 1), found shape=(32, 1)

 Arguments received by Functional.call():
   • inputs=('tf.Tensor(shape=(32, 1), dtype=float32)', 'tf.Tensor(shape=(32, 1), dtype=float32)')
   • training=False
   • mask=('None', 'None')

当我向上滚动时,我看到 Tensorflow 生成了三个(??????)参数?:

Level 1:tensorflow:Creating new FuncGraph for Python function <function StructuredFunctionWrapper.__init__.<locals>.trace_tf_function.<locals>.wrapped_fn at 0x0000027A795AE480> (key: FunctionContext(context=EagerContext(parent_graph=None, device_functions=(), colocation_stack=(), in_cross_replica_context=False, variable_policy=None, xla_context_id=0), scope_type=<ScopeType.VARIABLE_CREATION: 2>), Input Parameters:
  args_0 (POSITIONAL_ONLY): TensorSpec(shape=(32,), dtype=tf.int64, name=None)
  args_1 (POSITIONAL_ONLY): TensorSpec(shape=(40000, 1), dtype=tf.float32, name=None)
  args_2 (POSITIONAL_ONLY): TensorSpec(shape=(40000, 1), dtype=tf.float32, name=None)
Output Type:
  None
Captures:
  None)

我完全不知道该怎么做或如何处理这些错误日志。这是我第一次使用已保存为文件的模型,这绝对是一场噩梦。

作为参考,这里是 GitHub 存储库的链接(包含用于拟合模型和模型本身的

path_to_fft
函数和代码):https://github.com/brainage04/WestpacHackathon

这是运行

test.py
函数的完整错误日志,从开始到结束:https://pastebin.com/iVZ7dUWn

python tensorflow machine-learning keras
1个回答
0
投票

您的数据形状不正确,缺少批量维度,对于单个数据点,形状应该是

(1, 40000, 1)

© www.soinside.com 2019 - 2024. All rights reserved.