我只使用Dense图层编写了香草自动编码器。下面是我的代码:
iLayer = Input ((784,))
layer1 = Dense(128, activation='relu' ) (iLayer)
layer2 = Dense(64, activation='relu') (layer1)
layer3 = Dense(28, activation ='relu') (layer2)
layer4 = Dense(64, activation='relu') (layer3)
layer5 = Dense(128, activation='relu' ) (layer4)
layer6 = Dense(784, activation='softmax' ) (layer5)
model = Model (iLayer, layer6)
model.compile(loss='binary_crossentropy', optimizer='adam')
(trainX, trainY), (testX, testY) = mnist.load_data()
print ("shape of the trainX", trainX.shape)
trainX = trainX.reshape(trainX.shape[0], trainX.shape[1]* trainX.shape[2])
print ("shape of the trainX", trainX.shape)
model.fit (trainX, trainX, epochs=5, batch_size=100)
Run Code Online (Sandbox Code Playgroud)
1)softmax提供概率分布。明白了 …
machine-learning neural-network autoencoder keras cross-entropy
我正在尝试使用Inception V3模型进行图像分类。ImageDataGeneratorKeras 是否会创建新图像并添加到我的数据集中?如果我有1000张图像,是否可以使用此功能将其翻倍到用于训练的2000张图像?有没有一种方法可以知道创建了多少图像并将这些图像输入到模型中?
我正在尝试训练本研究论文建议的模型,其中我将卷积层的一半滤波器设置为Gabor滤波器,其余是默认初始化的随机权重.通常,如果我必须将图层设置为不可训练,我将trainable属性设置为False.但是在这里我只需要冻结一层过滤器的一半,我不知道该怎么做.任何帮助将非常感激.我正在使用带有Tensorflow后端的Keras.
因此,如果我num_words在初始化时不传递参数Tokenizer(),那么在使用它来标记训练数据集后如何找到词汇量大小?
为什么这样,我不想限制分词器词汇量的大小来了解我的 Keras 模型在没有它的情况下的表现。但随后我需要将此词汇量大小作为模型第一层定义中的参数传递。
我目前正在使用 SHAP 包来确定功能贡献。我已经将这种方法用于 XGBoost 和 RandomForest,而且效果非常好。由于我正在处理的数据是顺序数据,我尝试使用 LSTM 和 CNN 来训练模型,然后使用 SHAP 获得特征重要性DeepExplainer;但它不断抛出错误。我得到的错误是:
AssertionError: <class 'keras.callbacks.History'> is not currently a supported model type!.
Run Code Online (Sandbox Code Playgroud)
我也附上了示例代码(LSTM)。如果有人可以帮助我,那将会很有帮助。
shap.initjs()
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1],X.shape[2]), return_sequences=True))
model.add(LSTM(n_neurons, return_sequences=False))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
h=model.fit(X, y, epochs=nb_epochs, batch_size=n_batch, verbose=1, shuffle=True)
background = X[np.random.choice(X.shape[0],100, replace=False)]
explainer = shap.DeepExplainer(h,background)
Run Code Online (Sandbox Code Playgroud) 我正在尝试在google colab上绘制我的模型.
from keras.utils import plot_model
plot_model(model, to_file="model.png")
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
ImportError: Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
Run Code Online (Sandbox Code Playgroud)
我安装了pydot-ng,graphviz我仍然无法解决这个错误.
直到Keras版本2.1.6,通过访问底层model.model,能够将顺序模型"转换"为功能模型.从版本2.2.0开始,这已不再可能.
它还能以其他方式完成吗?
我目前正在使用Keras开发文本分类工具。它可以工作(工作正常,并且我的验证精度达到98.7),但是我无法确定一维卷积层如何与文本数据一起工作。
我应该使用哪些超参数?
我有以下几句话(输入数据):
这是一个非常简单的模型(我制作了更复杂的结构,但奇怪的是,它甚至在不使用LSTM的情况下也能更好地工作):
model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(labels_count, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
Run Code Online (Sandbox Code Playgroud)
我的主要问题是:Conv1D层应使用哪些超参数?
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
Run Code Online (Sandbox Code Playgroud)
如果我有以下输入数据:
这是否意味着filters=32只会扫描前32个单词,而完全扫描其余的单词(kernel_size=2)?我应该将过滤器设置为951(句子中最多单词数)吗?
图片示例:
例如,这是一个输入数据: http //joxi.ru/krDGDBBiEByPJA
这是卷积层的第一步(步骤2): http
这是第二步(步骤2): http //joxi.ru/brRG699iJ3Ra1m
如果filters = 32,层重复32次?我对么?因此,我不会在句子中说第156个单词,因此这些信息会丢失吗?
根据这个下面复制权从一个模式到另一个:
target_model.set_weights(model.get_weights())
Run Code Online (Sandbox Code Playgroud)
复制特定层的权重怎么样,这行得通吗?
model_1.layers[0].set_weights(source_model.layers[0].get_weights())
model_2.layers[0].set_weights(source_model.layers[0].get_weights())
Run Code Online (Sandbox Code Playgroud)
如果我训练model_1,model_2他们会有单独的重量吗?该文档没有说明这是否get_weights进行了深层复制。如果这不起作用,如何实现?
在我的理解中,epoch 是在整个数据集上任意频繁地重复运行,然后分部分处理,即所谓的批处理。每次train_on_batch计算损失后,权重都会更新,下一批将获得更好的结果。这些损失是我对神经网络质量和学习状态的指标。
在几个来源中,每个时期都会计算(并打印)损失。因此,我不确定我这样做是否正确。
目前我的 GAN 看起来像这样:
for epoch:
for batch:
fakes = generator.predict_on_batch(batch)
dlc = discriminator.train_on_batch(batch, ..)
dlf = discriminator.train_on_batch(fakes, ..)
dis_loss_total = 0.5 * np.add(dlc, dlf)
g_loss = gan.train_on_batch(batch,..)
# save losses to array to work with later
Run Code Online (Sandbox Code Playgroud)
这些损失是针对每个批次的。我如何在一个时代获得它们?顺便说一句:我需要一个时代的损失,为了什么?
python machine-learning keras generative-adversarial-network
keras ×10
python ×8
tensorflow ×4
autoencoder ×1
generative-adversarial-network ×1
graphviz ×1
keras-layer ×1
nlp ×1
pydot ×1
shap ×1
tokenize ×1