张量流序列模型的数据维度问题
Data dimensionality problem with tensorflow sequential model
Keras 顺序模型的新手给我带来了一些麻烦!
我有一个 x_train
的形状:17755 x 500 x 12
和 y_train
的形状:17755 x 15(标签已经被单热编码)
然后我制作了下一个模型来训练这个数据:
model = Sequential()
model.add(Conv2D(32,3,padding="same", activation="relu", input_shape=(17755,500,12)))
model.add(MaxPool2D())
model.add(Conv2D(32, 3, padding="same", activation="relu"))
model.add(MaxPool2D())
model.add(Conv2D(64, 3, padding="same", activation="relu"))
model.add(MaxPool2D())
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(128,activation="relu"))
model.add(Dense(15, activation="sigmoid"))
model.compile(optimizer ='adam', loss='categorical_crossentropy', metrics = ['Accuracy'])
history = model.fit(x_train, y_train, epochs=5)
1- 当我不使用 np.expand_dims
为批处理添加轴时,出现此错误:
ValueError: Input 0 of layer "sequential" is incompatible with the
layer: expected shape=(None, 17755, 500, 12), found shape=(None, 500,
12)
2- 当我使用 np.expand_dims
并且 x_train
的形状变为:1x17755x500x12
我收到此错误:
数据基数不明确:
x 尺寸:1
y 尺寸:17755
确保所有阵列包含相同数量的样本。
3- 当我也对 y_train
使用 np.expand_dims
时,它的形状变成了:1x17755x15
我收到此错误:
ValueError: Shapes (None, 17755, 15) and (None, 15) are incompatible
我知道我做错了根本性的事情,但那是什么?谁能帮我解决数据的形状问题?
关于 x_train
尝试在末尾添加一个新维度来表示 Conv2D
层所需的通道维度。另请注意,您没有为输入形状提供样本数。这是一个工作示例:
import tensorflow as tf
import numpy as np
x_train = np.random.random((17755,500,12))
x_train = np.expand_dims(x_train, axis=-1)
y_train = np.random.random((17755,15))
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,3,padding="same", activation="relu", input_shape=(500, 12, 1)))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(32, 3, padding="same", activation="relu"))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(64, 3, padding="same", activation="relu"))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.4))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation="relu"))
model.add(tf.keras.layers.Dense(15, activation="sigmoid"))
model.compile(optimizer ='adam', loss='categorical_crossentropy', metrics = ['Accuracy'])
history = model.fit(x_train, y_train, epochs=5)
Keras 顺序模型的新手给我带来了一些麻烦!
我有一个 x_train
的形状:17755 x 500 x 12
和 y_train
的形状:17755 x 15(标签已经被单热编码)
然后我制作了下一个模型来训练这个数据:
model = Sequential()
model.add(Conv2D(32,3,padding="same", activation="relu", input_shape=(17755,500,12)))
model.add(MaxPool2D())
model.add(Conv2D(32, 3, padding="same", activation="relu"))
model.add(MaxPool2D())
model.add(Conv2D(64, 3, padding="same", activation="relu"))
model.add(MaxPool2D())
model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(128,activation="relu"))
model.add(Dense(15, activation="sigmoid"))
model.compile(optimizer ='adam', loss='categorical_crossentropy', metrics = ['Accuracy'])
history = model.fit(x_train, y_train, epochs=5)
1- 当我不使用 np.expand_dims
为批处理添加轴时,出现此错误:
ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 17755, 500, 12), found shape=(None, 500, 12)
2- 当我使用 np.expand_dims
并且 x_train
的形状变为:1x17755x500x12
我收到此错误:
数据基数不明确:
x 尺寸:1
y 尺寸:17755
确保所有阵列包含相同数量的样本。
3- 当我也对 y_train
使用 np.expand_dims
时,它的形状变成了:1x17755x15
我收到此错误:
ValueError: Shapes (None, 17755, 15) and (None, 15) are incompatible
我知道我做错了根本性的事情,但那是什么?谁能帮我解决数据的形状问题?
关于 x_train
尝试在末尾添加一个新维度来表示 Conv2D
层所需的通道维度。另请注意,您没有为输入形状提供样本数。这是一个工作示例:
import tensorflow as tf
import numpy as np
x_train = np.random.random((17755,500,12))
x_train = np.expand_dims(x_train, axis=-1)
y_train = np.random.random((17755,15))
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,3,padding="same", activation="relu", input_shape=(500, 12, 1)))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(32, 3, padding="same", activation="relu"))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Conv2D(64, 3, padding="same", activation="relu"))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.4))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation="relu"))
model.add(tf.keras.layers.Dense(15, activation="sigmoid"))
model.compile(optimizer ='adam', loss='categorical_crossentropy', metrics = ['Accuracy'])
history = model.fit(x_train, y_train, epochs=5)