我刚刚使用Keras构建了我的第一个模型,这是输出.它看起来像是在构建任何Keras人工神经网络后获得的标准输出.即使在查看文档后,我也不完全了解时代是什么以及输出中打印的内容是什么.
什么是Keras的时代和损失?
(我知道这可能是一个非常基本的问题,但我似乎无法在网上找到答案,如果答案真的很难从文档中收集,我认为其他人会有同样的问题,因此决定在这里发布.)
Epoch 1/20
1213/1213 [==============================] - 0s - loss: 0.1760
Epoch 2/20
1213/1213 [==============================] - 0s - loss: 0.1840
Epoch 3/20
1213/1213 [==============================] - 0s - loss: 0.1816
Epoch 4/20
1213/1213 [==============================] - 0s - loss: 0.1915
Epoch 5/20
1213/1213 [==============================] - 0s - loss: 0.1928
Epoch 6/20
1213/1213 [==============================] - 0s - loss: 0.1964
Epoch 7/20
1213/1213 [==============================] - 0s - loss: 0.1948
Epoch 8/20
1213/1213 [==============================] - 0s - loss: 0.1971
Epoch 9/20
1213/1213 [==============================] - …Run Code Online (Sandbox Code Playgroud) 对于前馈网络(FFN),可以轻松计算参数数量.鉴于CNN,LSTM等有一种快速查找keras模型中参数数量的方法吗?
使用Anaconda Python 2.7 Windows 10.
我正在使用Keras exmaple训练语言模型:
print('Build model...')
model = Sequential()
model.add(GRU(512, return_sequences=True, input_shape=(maxlen, len(chars))))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
def sample(a, temperature=1.0):
# helper function to sample an index from a probability array
a = np.log(a) / temperature
a = np.exp(a) / np.sum(np.exp(a))
return np.argmax(np.random.multinomial(1, a, 1))
# train the model, output generated text after each iteration
for iteration in range(1, 3):
print()
print('-' * 50)
print('Iteration', iteration)
model.fit(X, y, batch_size=128, nb_epoch=1)
start_index = random.randint(0, …Run Code Online (Sandbox Code Playgroud) 我有一个新的数据集微调初始模型,并在Keras中将其保存为".h5"模型.现在我的目标是在android Tensorflow上运行我的模型,它只接受".pb"扩展名.问题是Keras或tensorflow中是否有任何库进行此转换?到目前为止我看过这篇文章:https: //blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-tutorial.html但还不清楚.
在Keras,我们可以将输出返回model.fit到历史记录,如下所示:
history = model.fit(X_train, y_train,
batch_size=batch_size,
nb_epoch=nb_epoch,
validation_data=(X_test, y_test))
Run Code Online (Sandbox Code Playgroud)
现在,如何将历史记录保存到文件中以供进一步使用(例如,绘制针对时期的acc或loss的绘制图)?
我使用Keras与Tensorflow作为后端,这里是我的代码:
import numpy as np
np.random.seed(1373)
import tensorflow as tf
tf.python.control_flow_ops = tf
import os
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.utils import np_utils
batch_size = 128
nb_classes = 10
nb_epoch = 12
img_rows, img_cols = 28, 28
nb_filters = 32
nb_pool = 2
nb_conv = 3
(X_train, y_train), (X_test, y_test) = mnist.load_data()
print(X_train.shape[0])
X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test …Run Code Online (Sandbox Code Playgroud) 我正在研究一种图像类增量分类器方法,使用CNN作为特征提取器和一个完全连接的块进行分类.
首先,我对每个训练有素的VGG网络进行了微调,以完成一项新任务.一旦网络被训练用于新任务,我就为每个班级存储一些示例,以避免在新班级可用时忘记.
当某些类可用时,我必须计算样本的每个输出,包括新类的示例.现在为旧类的输出添加零,并在新类输出上添加与每个新类对应的标签,我有新标签,即:如果有3个新类输入....
旧班类型输出: [0.1, 0.05, 0.79, ..., 0 0 0]
新类类型输出:[0.1, 0.09, 0.3, 0.4, ..., 1 0 0]**最后的输出对应于类.
我的问题是,我如何改变自定义的损失函数来训练新的类?我想要实现的损失函数定义为:
蒸馏损失对应于旧类别的输出以避免遗忘,而分类损失对应于新类别.
如果你能给我一些代码样本来改变keras中的损失函数会很好.
谢谢!!!!!
computer-vision deep-learning conv-neural-network keras loss-function
我正在努力做转学习; 为此我想删除神经网络的最后两层并添加另外两层.这是一个示例代码,它也输出相同的错误.
from keras.models import Sequential
from keras.layers import Input,Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.layers.core import Dropout, Activation
from keras.layers.pooling import GlobalAveragePooling2D
from keras.models import Model
in_img = Input(shape=(3, 32, 32))
x = Convolution2D(12, 3, 3, subsample=(2, 2), border_mode='valid', name='conv1')(in_img)
x = Activation('relu', name='relu_conv1')(x)
x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool1')(x)
x = Convolution2D(3, 1, 1, border_mode='valid', name='conv2')(x)
x = Activation('relu', name='relu_conv2')(x)
x = GlobalAveragePooling2D()(x)
o = Activation('softmax', name='loss')(x)
model = Model(input=in_img, output=[o])
model.compile(loss="categorical_crossentropy", optimizer="adam")
#model.load_weights('model_weights.h5', by_name=True)
model.summary() …Run Code Online (Sandbox Code Playgroud) 我有一个目录,其中包含图像的子文件夹(根据标签).我想在Keras中使用ImageDataGenerator时将这些数据拆分为train和test set.尽管keras中的model.fit()具有用于指定拆分的参数validation_split,但我找不到与model.fit_generator()相同的参数.怎么做 ?
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
samples_per_epoch=nb_train_samples,
nb_epoch=nb_epoch,
validation_data=??,
nb_val_samples=nb_validation_samples)
Run Code Online (Sandbox Code Playgroud)
我没有单独的验证数据目录,需要将其从训练数据中分离出来
普通Dense层中的第一个参数也是units,并且是该层中的神经元/节点的数量.然而,标准LSTM单元如下所示:
(这是" 理解LSTM网络 " 的重写版本)
在Keras,当我创建这样的LSTM对象LSTM(units=N, ...)时,我实际上是在创建N这些LSTM单元吗?或者它是LSTM单元内"神经网络"层的大小,即W公式中的?或者是别的什么?
对于上下文,我正在基于此示例代码工作.
以下是文档:https://keras.io/layers/recurrent/
它说:
units:正整数,输出空间的维数.
这让我觉得它是Keras LSTM"图层"对象的输出数量.意味着下一层将有N输入.这是否意味着NLSTM层中实际存在这些LSTM单元,或者可能只运行一个 LSTM单元用于N迭代输出N这些h[t]值,例如,从h[t-N]多达h[t]?
如果只定义了输出的数量,这是否意味着输入尚可,说,只是一个,还是我们必须手动创建滞后输入变量x[t-N]来x[t],一个由定义的每个LSTM单位units=N的说法?
在我写这篇文章的时候,我发现了论证的return_sequences作用.如果设置为True所有N输出都传递到下一层,而如果设置为False它,则只将最后一个h[t]输出传递给下一层.我对吗?