当前位置: 首页 > 面试题库 >

conv1D中的形状尺寸

林俊英
2023-03-14
问题内容

我试图用一层构建CNN,但是我有一些问题。确实,编译器告诉我

ValueError:检查模型输入时出错:预期conv1d_1_input具有3维,但数组的形状为(569,30)

这是代码

import numpy
from keras.models import Sequential
from keras.layers.convolutional import Conv1D
numpy.random.seed(7)
datasetTraining = numpy.loadtxt("CancerAdapter.csv",delimiter=",")
X = datasetTraining[:,1:31]
Y = datasetTraining[:,0]
datasetTesting = numpy.loadtxt("CancereEvaluation.csv",delimiter=",")
X_test = datasetTraining[:,1:31]
Y_test = datasetTraining[:,0]
model = Sequential()
model.add(Conv1D(2,2,activation='relu',input_shape=X.shape))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=150, batch_size=5)
scores = model.evaluate(X_test, Y_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

问题答案:

td; LR你需要重塑你的数据有一个 空间 维度Conv1d是有道理的:

X = np.expand_dims(X, axis=2) # reshape (569, 30) to (569, 30, 1) 
# now input can be set as 
model.add(Conv1D(2,2,activation='relu',input_shape=(30, 1))

本质上重塑如下所示的数据集:

features    
.8, .1, .3  
.2, .4, .6  
.7, .2, .1

至:

[[.8
.1
.3],

[.2,
 .4,
 .6
 ],

[.3,
 .6
 .1]]

解释和例子

通常,卷积在空间维度上起作用。内核在产生张量的维度上“卷积”。对于Conv1D,在每个示例的“步骤”维度上传递内核。

您将看到NLP中使用的Conv1D,其中steps是句子中的单词数(填充到某个固定的最大长度)。单词可能会被编码为长度为4的向量。

这是一个示例语句:

jack   .1   .3   -.52   |
is     .05  .8,  -.7    |<--- kernel is `convolving` along this dimension.
a      .5   .31  -.2    |
boy    .5   .8   -.4   \|/

在这种情况下,我们将输入设置为转换的方式:

maxlen = 4
input_dim = 3
model.add(Conv1D(2,2,activation='relu',input_shape=(maxlen, input_dim))

在您的情况下,您会将要素视为空间维度,每个要素的长度为1。(请参见下文)

这是您数据集中的一个例子

att1   .04    |
att2   .05    |  < -- kernel convolving along this dimension
att3   .1     |       notice the features have length 1. each
att4   .5    \|/      example have these 4 featues.

然后将Conv1D示例设置为:

maxlen = num_features = 4 # this would be 30 in your case
input_dim = 1 # since this is the length of _each_ feature (as shown above)

model.add(Conv1D(2,2,activation='relu',input_shape=(maxlen, input_dim))

如您所见,您的数据集必须重塑为(569,30,1)使用:

X = np.expand_dims(X, axis=2) # reshape (569, 30, 1) 
# now input can be set as 
model.add(Conv1D(2,2,activation='relu',input_shape=(30, 1))

这是一个可以运行的完整示例(我将使用Functional API)

from keras.models import Model
from keras.layers import Conv1D, Dense, MaxPool1D, Flatten, Input
import numpy as np

inp =  Input(shape=(5, 1))
conv = Conv1D(filters=2, kernel_size=2)(inp)
pool = MaxPool1D(pool_size=2)(conv)
flat = Flatten()(pool)
dense = Dense(1)(flat)
model = Model(inp, dense)
model.compile(loss='mse', optimizer='adam')

print(model.summary())

# get some data
X = np.expand_dims(np.random.randn(10, 5), axis=2)
y = np.random.randn(10, 1)

# fit model
model.fit(X, y)


 类似资料:
  • 我正在尝试创建一个CNN来对数据进行分类。我的数据是X[N\u数据,N\u特征]我想创建一个能够对其进行分类的神经网络。我的问题是关于keras后端Conv1D的输入形状。 我想在上面重复一个过滤器。。假设有10个特征,然后为接下来的10个特征保持相同的权重。对于每个数据,我的卷积层将创建N\U特征/10个新神经元。我该怎么做?我应该在input\u形状中放置什么? 有什么建议吗?非常感谢。

  • 我写了这段代码。我的输入形状是(100 x100 X3)。我是深度学习的新手。我花了这么多时间在这个问题上,但无法解决这个问题。任何帮助都非常感谢。 错误:在[15]:运行文件('/user/Project/SM/src/ann\u algo\u keras.py',wdir='/user/Project/SM/src')中随机启动突触权重:模型:“sequential\u 3” conv2d_1

  • 我试图为我的TextView创建一个圆形背景,所以我创建了如下所示的形状样式。但是我需要有多种颜色和多种大小(而textSize保持不变),所以我需要设置样式中的宽度/高度。 根据我的理解…图层列表把所有的形状放在另一个上面?因为我需要在不同的地方调用它12次,所以拥有12个形状样式的XMLS似乎相当麻烦。

  • 问题内容: 任一或可用于一个新的维度添加到一个数组。他们俩似乎都在创建一个视图,是否有任何理由或优势使用一个而不是另一个? ` 问题答案: 我看不出有太大差异的证据。您可以对非常大的阵列进行时间测试。基本上,两者都摆弄形状,甚至大步向前。 是访问此信息的好方法。例如: 两者都使用与原始缓冲区相同的缓冲区来创建视图。形状相同,但重塑不会改变。 让您指定。 并显示标志中的差异。 可能会更快,因为它所做

  • 我使用的是Python Version3.8.7和PIL库。 我有一个数据表,其中包含了蓝图的各种元素的维度。两个主要元素是线条(组成轮廓)和标签(彩色矩形)。使用PIL,我能够绘制下面的图像。 但是,我想填写每个房间的颜色与属于它的相应标签相同。现在我只有构成轮廓线的尺寸(坐标)和标签的尺寸。每个维度值(坐标)如下:

  • 问题内容: 我想切片一个numpy数组以获得最后一个维度中的第i个索引。对于3D阵列,这将是: 但是我正在编写一个函数,可以获取任意维度的数组,因此对于4D数组,我需要,依此类推。有没有一种方法可以获取任何数组的切片,而无需显式编写数组维? 问题答案: 存在或,它正是这样做的: 如果您想在方括号符号之外使用Ellipsis,则它是python对象。