预测的差异

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

Q1:我有一个维度为 44 和 5 的矩阵,代表 5 个特征向量。我定义了两个模型:第一个是基本的神经网络结构,第二个使用卷积层。我对输入层和大小不太了解。所以,我需要一些反馈来确认代码是否正确。

X_train = np.random.rand(44, 5)
y_train = np.random.rand(44, 1)
X_rem = np.random.rand(11, 5)
X_train= np.asarray(X_train).astype(np.float32)
X_rem= np.asarray(X_rem).astype(np.float32)
y_train= np.asarray(y_train).astype(np.float32)
train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))
BATCH_SIZE = 44
train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))
test_dataset = tf.data.Dataset.from_tensor_slices((X_rem, y_rem))

.

model1 = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(5,)),
    tf.keras.layers.Dense(10, activation='relu'),
    #tf.keras.layers.Dense(5, activation='relu'),
    tf.keras.layers.Dense(1)
])

.

model2 = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(5,)),
    tf.keras.layers.Reshape((5, 1)),
    tf.keras.layers.Conv1D(1, kernel_size=1, activation='relu'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(12, activation='linear'),
    tf.keras.layers.Dense(1)
])
model1.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.2),
                  loss='mean_absolute_error',
                  metrics=['mean_absolute_error'])
model2.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.2),
                  loss='mean_absolute_error',
                  metrics=['mean_absolute_error'])

Q2:如果代码正确,我有一个维度为 (44, 5) 的矩阵。那么,为什么输入形状指定为(5,)呢?据我了解,该模型需要以下格式的输入形状(批量大小、高度、宽度)。不过,我以前没有重塑过它们。

Q3:为什么使用“model1.predict(X_rem)”和“model2.predict(X_rem)”后,X_rem 中的所有值都得到相同的值? 'model1.fit(X_train, y_train, epochs=100)' 和 'model1.fit(train_dataset, epochs=100)' 这两个函数的用法有区别吗?

我尝试在定义模型之前重塑输入数据。我从未完全理解其背后的概念。

python tensorflow deep-learning computer-vision tensorflow2.0
1个回答
0
投票
Q1 : Yes, the code is correct.

Q2: The input shape is defined as `(5,)` because you are using `Conv1D`. If you use `Conv2D` then you need to add one dimension more.

When using `Conv1d` , the convolution takes place on one axis (the first axis).
When using `Conv2D`, the convolution uses 2 dimensions, so 2 axis.

Q3:您收到相同的值有两个原因:

  1. 你的学习率非常大,因此模型无法获得正确的梯度。

  2. 您仅使用

    Conv1d
    和 1 个过滤器,因此您只需传递数组的值。如果您忽略此层或使用例如
    tf.keras.layers.Conv1D(10, kernel_size=1, activation='relu')
    ,您会发现您没有获得相同的值。

train_dataset
是张量流数据集,如果使用
X_train and y_train
,调用fit时没有区别。不过效率更高。

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