Tensorflow:应该定义输入的通道维度

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

我是 Tensorflow 的新手,正在尝试训练特定的深度学习神经网络。我正在使用 Tensorflow (2.11.0) 获取深度神经网络模型,如下所述。我使用的数据也如下:

资料:

这里是一些示例数据。为了方便起见,我们可以考虑 10 个数据样本。在这里,每个样本都有形状:

(128,128)
.

可以将以下代码视为示例训练数据。

x_train = np.random.rand(10, 64, 64, 1)

归一化层:

normalizer = tf.keras.layers.Normalization(axis=-1)
normalizer.adapt(x_train)

搭建模型:

def build_and_compile_model(norm):
    model = tf.keras.Sequential([
      norm,
      layers.Conv2D(128, 128, activation='relu'),
      layers.Conv2D(3, 3, activation='relu'),
      layers.Flatten(),
      layers.Dense(units=32, activation='relu'),
      layers.Dense(units=1)
    ])

    model.compile(loss='mean_absolute_error', optimizer=tf.keras.optimizers.Adam(0.001))
    
    return model

当我做

dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()

我收到以下错误:

ValueError: The channel dimension of the inputs should be defined. The input_shape received is (None, None, None, None), where axis -1 (0-based) is the channel dimension, which found to be `None`.

我在这里做错了什么?

我试图从thisthisthisthis中获得见解。但是,我还没有找到可行的解决方案。

我应该怎么做才能消除错误并让模型正常工作?

我将不胜感激任何帮助。

python tensorflow machine-learning deep-learning
1个回答
1
投票

直接在归一化层定义输入形状(或添加一个

Input
层),因为它不能直接推断:

import numpy as np
import tensorflow as tf

x_train = np.random.rand(10, 128, 128, 1)
normalizer = tf.keras.layers.Normalization(input_shape=[128, 128, 1], axis=-1)
normalizer.adapt(x_train)


def build_and_compile_model(norm):
    model = tf.keras.Sequential([
        norm,
        tf.keras.layers.Conv2D(64, 64, activation='relu'),
        tf.keras.layers.Conv2D(3, 3, activation='relu'),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(units=32, activation='relu'),
        tf.keras.layers.Dense(units=1)
    ])

    model.compile(loss='mean_absolute_error', optimizer=tf.keras.optimizers.Adam(0.001))

    return model


dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()

此外,您的模型无法按原样工作,您在第一个

Conv2D
层中使用的内核大小为128,然后在另一个内核大小为3的
Conv2D
层中使用,但您的数据具有
(10, 128, 128, 1)
的形状。我更改它以使您的代码可执行。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.