我试图在Keras 2.0中合并两个Sequential模型,使用以下行:
merged_model.add(Merge([model1, model2], mode='concat'))
Run Code Online (Sandbox Code Playgroud)
这仍然可以正常工作,但会发出警告:
"The `Merge` layer is deprecated and will be removed after 08/2017. Use
instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc."
Run Code Online (Sandbox Code Playgroud)
但是,研究Keras文档并尝试添加Add(),并没有产生有效的东西.我已经阅读了几个有相同问题的人发帖,但发现没有解决方案适用于我的情况.有什么建议?
model = Sequential()
model1 = Sequential()
model1.add(Dense(300, input_dim=40, activation='relu', name='layer_1'))
model2 = Sequential()
model2.add(Dense(300, input_dim=40, activation='relu', name='layer_2'))
merged_model = Sequential()
merged_model.add(Merge([model1, model2], mode='concat'))
merged_model.add(Dense(1, activation='softmax', name='output_layer'))
merged_model.compile(loss='binary_crossentropy', optimizer='adam',
metrics=['accuracy'])
checkpoint = ModelCheckpoint('weights.h5', monitor='val_acc',
save_best_only=True, verbose=2)
early_stopping = EarlyStopping(monitor="val_loss", patience=5)
merged_model.fit([x1, x2], y=y, batch_size=384, epochs=200,
verbose=1, validation_split=0.1, shuffle=True,
callbacks=[early_stopping, checkpoint])
Run Code Online (Sandbox Code Playgroud)
编辑:当我尝试时(如下面由Kent Sommer建议):
from keras.layers.merge …Run Code Online (Sandbox Code Playgroud) 我有一个名为“data”的 Pandas DataFrame,有 2 列和 50 行,每行填充一两行文本,从 .tsv 文件导入。除了字符串之外,一些问题可能包含整数和浮点数。我试图提取每个句子的第一个单词(在两列中),但始终收到此错误:AttributeError: 'DataFrame' object has no attribute 'str'。
起初,我认为错误是由于我错误地使用了“data.str.split”,但我能谷歌的所有更改都失败了。然后我通过文件可能不是所有的字符串组成。所以我在文件上尝试了“data.astype(str)”,但同样的错误仍然存在。有什么建议?非常感谢!
这是我的代码:
import pandas as pd
questions = "questions.tsv"
data = pd.read_csv(questions, usecols = [3], nrows = 50, header=1, sep="\t")
data = data.astype(str)
first_words = data.str.split(None, 1)[0]
Run Code Online (Sandbox Code Playgroud) 我试图根据条件将两个列表中的项目放在一起,以创建第三个列表作为输出。即使我是新手,这也相对简单。但是,我试图让循环的一部分只运行一次,而这正是我挣扎的地方。有没有办法做到这一点?
数据来自文本数据的大型 DataFrame。但是我创建了这个问题的简化版本,以尝试更轻松地解决它(没有运气):
a = [1, 2, 3, 4, 5]
A = [4, 5]
b = []
for i in a:
if i in A:
b.append(3.5) # My aim is to make this line run only once
b.append(i)
else:
b.append(i)
print(b)
Run Code Online (Sandbox Code Playgroud)
这给出:
[1, 2, 3, 3.5, 4, 3.5, 5]
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到以下结果?
[1, 2, 3, 3.5, 4, 5]
Run Code Online (Sandbox Code Playgroud) 我有一个 Dataframe,其中每行包含一个句子,后跟一个用 spaCy 创建的词性标签列表:
df.head()
question POS_tags
0 A title for my ... [DT, NN, IN,...]
1 If one of the ... [IN, CD, IN,...]
Run Code Online (Sandbox Code Playgroud)
当我将 DataFrame 写入 csv 文件(encoding='utf-8')并重新打开它时,看起来数据格式已更改,POS 标签现在出现在引号 ' ' 之间,如下所示:
df.head()
question POS_tags
0 A title for my ... ['DT', 'NN', 'IN',...]
1 If one of the ... ['IN', 'CD', 'IN',...]
Run Code Online (Sandbox Code Playgroud)
当我现在尝试使用 POS 标签进行某些操作时,结果发现它们不再是列表,而是变成了甚至包含引号的字符串。它们看起来仍然像列表,但事实并非如此。这样做时这一点很清楚:
q = df['POS_tags']
q = list(q)
print(q)
Run Code Online (Sandbox Code Playgroud)
结果是:
["['DT', 'NN', 'IN']"]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我要么希望“ POS_tags ”列包含列表,即使在保存到 csv 并重新打开之后也是如此。或者我想对“ POS_tags ”列进行操作,以再次获得 SpaCy 最初创建的相同列表。有什么建议如何做到这一点?
我有两个等长的系列(df1 和 df2),它们需要组合成一个 DataFrame 列,如下所示。每个索引只有一个值或没有值但从来没有两个值,因此没有重复(例如,如果 df1 在索引 0 处有一个值 'A',则 df2 在索引 0 处为空,反之亦然)。
df1 = c1 df2 = c2
0 A 0
1 B 1
2 2 C
3 D 3
4 E 4
5 5 F
6 6
7 G 7
Run Code Online (Sandbox Code Playgroud)
我想要的结果是这样的:
0 A
1 B
2 C
3 D
4 E
5 F
6
7 G
Run Code Online (Sandbox Code Playgroud)
我试过了.concat,.append而且。union,但这些不会产生预期的结果。那么正确的做法是什么呢?