这个Python代码:
import numpy as p
def firstfunction():
UnFilteredDuringExSummaryOfMeansArray = []
MeanOutputHeader=['TestID','ConditionName','FilterType','RRMean','HRMean',
'dZdtMaxVoltageMean','BZMean','ZXMean','LVETMean','Z0Mean',
'StrokeVolumeMean','CardiacOutputMean','VelocityIndexMean']
dataMatrix = BeatByBeatMatrixOfMatrices[column]
roughTrimmedMatrix = p.array(dataMatrix[1:,1:17])
trimmedMatrix = p.array(roughTrimmedMatrix,dtype=p.float64) #ERROR THROWN HERE
myMeans = p.mean(trimmedMatrix,axis=0,dtype=p.float64)
conditionMeansArray = [TestID,testCondition,'UnfilteredBefore',myMeans[3], myMeans[4],
myMeans[6], myMeans[9], myMeans[10], myMeans[11], myMeans[12],
myMeans[13], myMeans[14], myMeans[15]]
UnFilteredDuringExSummaryOfMeansArray.append(conditionMeansArray)
secondfunction(UnFilteredDuringExSummaryOfMeansArray)
return
def secondfunction(UnFilteredDuringExSummaryOfMeansArray):
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
return
firstfunction()
Run Code Online (Sandbox Code Playgroud)
抛出此错误消息:
File "mypath\mypythonscript.py", line 3484, in secondfunction
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何解决上面破坏的代码中的问题,以便它停止抛出错误消息?
编辑: 我做了一个打印命令来获取矩阵的内容,这是打印出来的:
UnFilteredDuringExSummaryOfMeansArray是:
[['TestID', 'ConditionName', 'FilterType', 'RRMean', 'HRMean', 'dZdtMaxVoltageMean', 'BZMean', 'ZXMean', …
Run Code Online (Sandbox Code Playgroud) 许多用户都将其作为切换到Pytorch的原因,但是我还没有找到牺牲/最渴望的实用质量,速度和执行力的理由/解释。
以下是代码基准测试性能,即TF1与TF2的对比-TF1的运行速度提高了47%至276%。
我的问题是:在图形或硬件级别上,什么导致如此显着的下降?
寻找详细的答案-已经熟悉广泛的概念。相关的Git
规格:CUDA 10.0.130,cuDNN 7.4.2,Python 3.7.4,Windows 10,GTX 1070
基准测试结果:
UPDATE:禁用每下面的代码不会急于执行没有帮助。但是,该行为是不一致的:有时以图形方式运行有很大帮助,而其他时候其运行速度相对于Eager 慢。
由于TF开发人员没有出现在任何地方,因此我将自己进行调查-可以跟踪相关的Github问题的进展。
更新2:分享大量实验结果,并附有解释;应该在今天完成。
基准代码:
# use tensorflow.keras... to benchmark tf.keras; used GPU for all above benchmarks
from keras.layers import Input, Dense, LSTM, Bidirectional, Conv1D
from keras.layers import Flatten, Dropout
from keras.models import Model
from keras.optimizers import Adam
import keras.backend as K
import numpy as np
from time import time
batch_shape = (32, 400, 16) …
Run Code Online (Sandbox Code Playgroud) 什么是如何将TensorFlow TFRecord与Keras模型和tf.session.run()一起使用,同时将数据集保存在具有队列运行程序的张量中?
以下是一个可行的代码段,但需要进行以下改进:
这是片段,有几条TODO线表明需要什么:
from keras.models import Model
import tensorflow as tf
from keras import backend as K
from keras.layers import Dense, Input
from keras.objectives import categorical_crossentropy
from tensorflow.examples.tutorials.mnist import input_data
sess = tf.Session()
K.set_session(sess)
# Can this be done more efficiently than placeholders w/ TFRecords?
img = tf.placeholder(tf.float32, shape=(None, 784))
labels = tf.placeholder(tf.float32, shape=(None, 10))
# TODO: Use Input()
x = Dense(128, activation='relu')(img)
x = Dense(128, activation='relu')(x)
preds = Dense(10, activation='softmax')(x)
# TODO: …
Run Code Online (Sandbox Code Playgroud) 理论上,由于权重具有固定大小,因此预测应该是恒定的。如何在编译后恢复速度(无需删除优化器)?
查看相关实验:https : //nbviewer.jupyter.org/github/off99555/TensorFlowExperiments/blob/master/test-prediction-speed-after-compile.ipynb?flush_cache=true
假设我们采用np.dot
两个'float32'
2D数组:
res = np.dot(a, b) # see CASE 1
print(list(res[0])) # list shows more digits
Run Code Online (Sandbox Code Playgroud)
[-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287]
Run Code Online (Sandbox Code Playgroud)
数字。除了它们可以更改:
案例1:切片a
np.random.seed(1)
a = np.random.randn(9, 6).astype('float32')
b = np.random.randn(6, 6).astype('float32')
for i in range(1, len(a)):
print(list(np.dot(a[:i], b)[0])) # full shape: (i, 6)
Run Code Online (Sandbox Code Playgroud)
[-0.9044868, -1.1708502, 0.90713596, 3.5594249, 1.1374012, -1.3826287]
[-0.90448684, -1.1708503, 0.9071359, 3.5594249, 1.1374011, -1.3826288]
[-0.90448684, -1.1708503, 0.9071359, 3.5594249, 1.1374011, -1.3826288]
[-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287]
[-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287] …
Run Code Online (Sandbox Code Playgroud) 有什么不同?文档对此没有任何说明,并且它们help()
是相同的。是否有一个对象isinstance
会因一个而不是另一个失败?
我正在构建一个用于分类的RNN(在RNN之后有一个softmax层)。要进行正则化的选项有很多,我不确定是否只尝试所有这些,效果会一样吗?在什么情况下我应该规范哪些组件?
这些组件是:
python regularized deep-learning keras recurrent-neural-network
假设一个数组a.shape == (N, M)
和一个向量v.shape == (N,)
。我们的目标是计算argmin
的abs
的v
距离减去每一个元素的a
-也就是说,
out = np.zeros(N, M)
for i in range(N):
for j in range(M):
out[i, j] = np.argmin(np.abs(a[i, j] - v))
Run Code Online (Sandbox Code Playgroud)
我有一个通过的矢量化实现np.matlib.repmat
,它要快得多,但需要O(M*N^2)
内存,在实践中是不可接受的。计算仍然在 CPU 上完成,所以最好的办法似乎是在 C 中实现 for 循环作为扩展,但也许 Numpy 已经实现了这个逻辑。
可以?任何可以有效实现上述功能的 Numpy 函数?
假设我有一个整数序列:
0,1,2, ..
并希望根据给定的最后3个整数来预测下一个整数,例如:
[0,1,2]->5
,[3,4,5]->6
等
假设我像这样设置模型:
batch_size=1
time_steps=3
model = Sequential()
model.add(LSTM(4, batch_input_shape=(batch_size, time_steps, 1), stateful=True))
model.add(Dense(1))
Run Code Online (Sandbox Code Playgroud)
据我了解,模型具有以下结构(请原图):
第一个问题:我的理解正确吗?
请注意,我已经画出了C_{t-1}, h_{t-1}
进入图片的先前状态,因为指定时会暴露出来stateful=True
。在这个简单的“下一个整数预测”问题中,应通过提供此额外的信息来改善性能(只要先前的状态是由前三个整数产生的)。
这使我想到了一个主要问题: 似乎标准做法(例如,参见此博客文章和TimeseriesGenerator keras预处理实用程序)是在训练过程中向模型提供一组交错的输入。
例如:
batch0: [[0, 1, 2]]
batch1: [[1, 2, 3]]
batch2: [[2, 3, 4]]
etc
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为这似乎需要第一Lstm单元的输出(对应于第一时间步长)。看这个图:
从tensorflow docs:
stateful:布尔值(默认为False)。如果为True,则批次中索引i的每个样本的最后状态将用作下一个批次中索引i的样本的初始状态。
似乎此“内部”状态不可用,并且所有可用状态都是最终状态。看这个图:
因此,如果我的理解是正确的(显然不是这样),那么在使用时是否不应该将不重叠的样本窗口馈送到模型中stateful=True
?例如:
batch0: [[0, 1, 2]]
batch1: [[3, 4, 5]]
batch2: [[6, 7, 8]]
etc
Run Code Online (Sandbox Code Playgroud) python ×8
keras ×5
tensorflow ×4
numpy ×3
arrays ×2
performance ×2
python-3.x ×2
c ×1
for-loop ×1
git ×1
github ×1
keras-layer ×1
lstm ×1
precision ×1
regularized ×1
slice ×1